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)






<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>UploadFile3</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" action="{{ url_for('upload3.index') }}">
    {{ form.hidden_tag() }}
    {{ form.photo }}
    <input type="submit" value="提交">
    {% for error in form.photo.errors %}
        <span style="color:red;">{{ error }}</span>
    {% endfor %}
</form>
{% if file_url %}
    <br/>
    <img src="{{ file_url }}">
{% endif %}
</body>
</html>




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

configure_uploads(_app, photos)
patch_request_class(_app)





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

SECRET_KEY = 'abcdefg'
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,284评论 22 257
  • FLASK框架 简介: flask是一个非常小的python web框架 只提供了一个强劲的核心 其它都...
    riverstation阅读 2,186评论 2 38
  • ​   在第1章,我们已经了解了Flask的基本知识,如果想要进一步开发更复杂的Flask应用,我们就得了解F...
    懵懂_傻孩纸阅读 3,012评论 0 4
  • 人数众多的微信群里,你如何管理通知发放进度?想不想使用更高效的办法发通知?本文推荐给你一款小程序,帮助你轻松搞定微...
    王树义阅读 9,626评论 2 9
  • 马宏杰在《最后的耍猴人》中作序,有一句话特别打动我——在这近30年里,我的镜头从来没有说谎。这句话太朴实了,可正因...
    叔圭阅读 423评论 2 2