欢迎访问宙启技术站
智能推送

PythonFlask-WTF文件批量上传示例

发布时间:2023-12-11 06:19:35

Python Flask是一个用于开发Web应用的微型框架,可以方便地构建简单的网站和Web服务。WTForms是一个用于构建Web表单的Python库,可以帮助我们处理表单的验证和渲染。

在Python Flask中,使用Flask-WTF扩展可以轻松地集成WTForms和Flask,实现表单的数据验证和渲染。文件上传是常见的Web应用功能之一,可以用于用户上传图片、文档等文件。

下面是一个使用Python Flask和Flask-WTF扩展实现文件批量上传功能的示例代码:

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'

class UploadForm(FlaskForm):
    files = FileField('Files', validators=[DataRequired(), FileAllowed(['txt', 'pdf', 'doc', 'docx'])])

@app.route('/', methods=['GET', 'POST'])
def upload():
    form = UploadForm()

    if form.validate_on_submit():
        files = request.files.getlist('files')
        filenames = []
        for file in files:
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            filenames.append(filename)
        
        return render_template('success.html', filenames=filenames)
    
    return render_template('upload.html', form=form)

if __name__ == '__main__':
    app.run(debug=True)

在上面的示例中,首先导入了必要的模块和类。然后,创建了一个Flask应用,并设置了一个密钥用于保护表单数据。

接下来,定义了一个继承自FlaskForm的表单类UploadForm,其中包含一个FileField字段,用于文件上传。在FileField字段中,使用DataRequired验证器确保用户选择了文件,并使用FileAllowed验证器限制文件类型为txt、pdf、doc或docx。

在路由函数upload中,首先实例化了UploadForm表单类,并在GET请求时返回渲染upload.html模板。在POST请求时,通过form.validate_on_submit()判断表单数据是否有效。

如果有效,通过request.files.getlist('files')获取上传的文件列表。然后,遍历文件列表,使用secure_filename函数生成安全的文件名,并使用file.save方法将文件保存在指定的上传文件夹下,并将文件名添加到filenames列表中。

最后,在成功页面模板success.html中,展示上传成功的文件名列表。

需要注意的是,由于文件上传涉及到文件系统的操作,需要在配置中指定一个合适的上传文件夹,如app.config['UPLOAD_FOLDER'] = '/path/to/upload/folder'。

以上就是使用Python Flask和Flask-WTF扩展实现文件批量上传功能的示例代码。你可以根据实际需求进行修改和扩展,来满足不同的业务需求。