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

PythonFlask-WTF文件上传和保存图片

发布时间:2023-12-11 06:16:06

Python Flask-WTF是Flask框架的一个插件,用于处理Web表单的验证和呈现。它基于WTForms库,提供了一种简单而灵活的方式来处理表单和验证数据。

文件上传和保存图片是Web应用开发中非常常见的功能,下面我将介绍如何使用Python Flask-WTF来实现文件上传和保存图片的功能,以及一些使用例子。

首先,你需要安装Flask-WTF库。可以使用pip工具来进行安装。

pip install Flask-WTF

接下来,在你的Flask应用中导入Flask-WTF库。

from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed, FileRequired
from werkzeug.utils import secure_filename
from flask_uploads import UploadSet, IMAGES

然后,创建一个继承自FlaskForm的表单类。

class UploadForm(FlaskForm):
    photo = FileField(validators=[FileRequired(), FileAllowed(['jpg', 'jpeg', 'png', 'gif'])])

在表单类中,我们使用FileField字段来定义文件上传的字段。在validators参数中,我们使用FileRequired()来验证文件是否必须上传,FileAllowed()来限制上传文件的类型。

接下来,我们需要在Flask应用中配置并初始化文件上传的设置。

app.config['UPLOADED_PHOTOS_DEST'] = 'uploads'
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)

在上面的代码中,我们配置了上传文件的保存目录为'uploads',并使用UploadSet()函数来初始化文件上传设置。

最后,编写一个视图函数来处理文件上传的请求。

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    form = UploadForm()
    if form.validate_on_submit():
        filename = secure_filename(form.photo.data.filename)
        photos.save(form.photo.data, name=filename)
        return 'File Uploaded Successfully!'
    return render_template('upload.html', form=form)

在视图函数中,我们首先实例化表单类对象,然后使用validate_on_submit()方法来处理表单的提交请求。如果表单验证通过,我们使用secure_filename()函数来获取安全的文件名,并使用photos.save()函数保存文件。最后,我们返回一个成功上传的提示信息。

除了基本的文件上传和保存功能,Flask-WTF还提供了更多的功能,比如文件大小限制、文件重命名等。你可以根据需要查看Flask-WTF的文档来了解更多细节。

下面是一个完整的使用例子。

from flask import Flask, render_template
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed, FileRequired
from werkzeug.utils import secure_filename
from flask_uploads import UploadSet, IMAGES
from flask_uploads import configure_uploads

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

app.config['UPLOADED_PHOTOS_DEST'] = 'uploads'
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)

class UploadForm(FlaskForm):
    photo = FileField(validators=[FileRequired(), FileAllowed(['jpg', 'jpeg', 'png', 'gif'])])

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    form = UploadForm()
    if form.validate_on_submit():
        filename = secure_filename(form.photo.data.filename)
        photos.save(form.photo.data, name=filename)
        return 'File Uploaded Successfully!'
    return render_template('upload.html', form=form)

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

在上面的例子中,我们创建了一个Flask应用,定义了一个路由为'/upload'的视图函数。在视图函数中,我们使用FlaskForm来定义文件上传的表单类,然后处理表单的提交请求,并返回一个成功上传的提示信息。

最后,我们运行应用,并在浏览器中打开'http://localhost:5000/upload'来提交文件。

以上就是使用Python Flask-WTF实现文件上传和保存图片的方法和使用例子。希望对你有所帮助!