FLASK文件上传 --- 使用flask_uploads + flask_wtf插件

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Blueprint, render_template
from flask_uploads import UploadSet, IMAGES
from flask_wtf import FlaskForm
from flask_wtf.file import FileRequired, FileField, FileAllowed
from wtforms import SubmitField

bp = Blueprint('upload3', __name__, url_prefix='/upload3')
photos = UploadSet('photos', IMAGES)


class UploadFileForm(FlaskForm):
    photo = FileField(validators=[
        # 显示文件上传类型
        FileAllowed(photos, '只能上传图片'),
        # 必须上传文件
        FileRequired('没有选择文件')
    ])
    submit = SubmitField('上传')


# 需要设置methods,前面忘记写了报错 
@bp.route('/', methods=['GET', 'POST'])
def index():
    # 不能传入request.form参数
    form = UploadFileForm()
    if form.validate_on_submit():
        # 从from对象中保存文件
        filename = photos.save(form.photo.data)
        # 还是返回了文件的url路径,而不是文件路径
        file_url = photos.url(filename)
    else:
        file_url = None
    return render_template('update3/index.html', form=form, file_url=file_url)









    
    UploadFile3


{{ form.hidden_tag() }} {{ form.photo }} {% for error in form.photo.errors %} {{ error }} {% endfor %}
{% if file_url %}
{% endif %}




因为用到了flask_uploads,所以还是需要加上两个函数

configure_uploads(_app, photos)
patch_request_class(_app)





如果用上form表单的话,需要加上SECRET_KEY
这个是随便写的,但正常情况下,肯定会生成随机的字符串。

SECRET_KEY = 'abcdefg'

你可能感兴趣的:(FLASK文件上传 --- 使用flask_uploads + flask_wtf插件)