Flask-WTF中的FileField()实现文件上传和展示功能
发布时间:2024-01-17 12:03:55
Flask-WTF是一个为Flask应用程序提供表单验证和安全特性的扩展。其中的FileField()是一种表单字段类型,用于实现文件上传和展示功能。
要在Flask-WTF中使用FileField(),首先要导入相应的类和模块:
from flask import Flask, render_template from flask_wtf import FlaskForm from flask_wtf.file import FileField, FileAllowed, FileRequired
然后创建一个自定义的表单类,继承自FlaskForm,并在其中定义一个FileField()字段:
class MyForm(FlaskForm):
file = FileField('Upload File', validators=[
FileRequired(),
FileAllowed(['txt', 'pdf', 'docx'], 'Only TXT, PDF, and DOCX files are allowed!')
])
在上面的例子中,我们定义了一个名为file的FileField()字段,它将用于接收上传的文件。使用validators参数可以对文件进行验证,其中FileRequired()用于确保文件字段不为空,FileAllowed()用于限制文件扩展名。
要在视图函数中处理该表单,首先要实例化该表单类,并将其传递给请求的页面:
@app.route('/', methods=['GET', 'POST'])
def upload_file():
form = MyForm()
if form.validate_on_submit():
file = form.file.data
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return 'File has been uploaded successfully!'
return render_template('upload_file.html', form=form)
在上面的例子中,如果表单的验证通过,则可以通过form.file.data访问上传的文件对象。使用secure_filename()函数对文件名进行安全处理,然后使用save()方法将文件保存到指定的文件夹中。
最后,在HTML模板中使用FileField()字段来渲染文件上传表单:
<form method="POST" enctype="multipart/form-data">
{{ form.csrf_token }}
{{ form.file.label }} {{ form.file() }}
{{ form.submit() }}
</form>
在上面的例子中,使用form.file.label和form.file()分别显示字段的标签和输入控件。
当用户提交表单时,Flask会自动处理文件上传,并将其保存在配置的文件夹中。在处理文件的其他方面,你可以根据自己的需求进行扩展,例如对文件大小进行限制,对文件名进行处理等。
