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

使用wtforms.fieldsFileField()在Python中实现文件上传功能

发布时间:2024-01-13 11:11:22

在Python中实现文件上传功能可以使用wtforms.fields.FileField()字段。FileField()是wtforms库中的一个字段类,用于接收用户上传的文件。

以下是一个简单的实例,演示如何使用wtforms.fields.FileField()实现文件上传功能:

首先,需要安装wtforms库,可以使用以下命令安装:

pip install wtforms

然后,创建一个Python文件(例如app.py)并添加以下代码:

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import SubmitField
from wtforms.fields import FileField

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret-key'

class FileUploadForm(FlaskForm):
    file = FileField('选择文件')
    submit = SubmitField('上传')

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    form = FileUploadForm()
    
    if form.validate_on_submit():
        file = form.file.data
        file.save('uploads/' + file.filename)
        return '文件上传成功!'

    return render_template('upload.html', form=form)

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

在上面的代码中,我们首先导入了需要的库。然后,我们定义了一个名为FileUploadForm的FlaskForm子类,它具有一个FileField字段和一个SubmitField字段。在route('/')装饰器中,我们创建并实例化了该表单。然后,在POST请求中,我们通过form.validate_on_submit()检查表单是否有有效的数据提交。如果是这样,我们获取上传的文件对象并使用.save()方法将其保存到指定的目录中。最后,我们返回一个简单的成功消息。

接下来,我们需要创建一个HTML模板(例如upload.html)来呈现表单。在这个模板中,我们使用Flask-WTF的form.hidden_tag()函数来生成CSRF令牌,并使用form.file来呈现文件上传字段。我们还为上传按钮添加了一个.form-control类:

<!DOCTYPE html>
<html>
<head>
    <title>文件上传示例</title>
    <link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
    <div class="container mt-5">
        <h3>文件上传示例</h3>
        <form method="POST" enctype="multipart/form-data">
            {{ form.hidden_tag() }}
            <div class="form-group">
                {{ form.file(class='form-control') }}
            </div>
            <button type="submit" class="btn btn-primary">{{ form.submit.label }}</button>
        </form>
    </div>
</body>
</html>

最后,我们可以运行app.py文件并访问http://localhost:5000/来查看上传文件的表单。提交表单后,文件将保存在项目目录下的uploads文件夹中。

这个简单的例子演示了如何使用wtforms.fields.FileField()在Python中实现文件上传功能。你可以根据具体需求对代码进行扩展和修改。例如,你可以添加文件类型验证或文件大小限制等功能来增强文件上传的安全性。