flask-uploads扩展的使用

参考:
http://www.cnblogs.com/himir/p/5940705.html
https://zhuanlan.zhihu.com/p/24423891
flask-uploads    flask的一个文件上传扩展, 提供了UploadSet这个概念    
flask-wtf(中文)    很强大的表单的扩展    
flask-bootstrap    bootstrap的flask扩展, 结合模版使用, 此处用到quick_form功能    
 
from flask import Flask, render_templatefrom flask_uploads import UploadSet, IMAGES, configure_uploadsfrom flask_wtf import Formfrom wtforms import SubmitFieldfrom flask_wtf.file import FileField, FileAllowed, FileRequiredfrom flask_bootstrap import Bootstrap
from werkzeug.utils import secure_filenameapp = Flask(__name__)# 新建一个set用于设置文件类型、过滤等set_mypic = UploadSet(‘mypic‘)  # mypic# 用于wtf.quick_form()模版渲染bootstrap = Bootstrap(app)# mypic 的存储位置,
# UPLOADED_xxxxx_DEST, xxxxx部分就是定义的set的名称, mypi, 下同app.config[‘UPLOADED_MYPIC_DEST‘] = ‘./static/img‘# mypic 允许存储的类型, IMAGES为预设的 tuple(‘jpg jpe jpeg png gif svg bmp‘.split())
#DOCUMENTS = tuple(‘rtf odf ods gnumeric abw doc docx xls xlsx‘.split())
#AUDIO = tuple(‘wav mp3 aac ogg oga flac‘.split())
#TEXT = (‘txt‘,)
#DATA = ...
#SCRIPTS = ...
#ARCHIVES = ...
#EXECUTABLES = ...
#DEFAULT = TEXT + DOCUMENTS + IMAGES + DATAapp.config[‘UPLOADED_MYPIC_ALLOW‘] = IMAGES# 把刚刚app设置的config注册到set_mypicconfigure_uploads(app, set_mypic)
# 此处WTF的SCRF密码默认为和flask的SECRET_KEY一样
# app.config[‘WTF_CSRF_SECRET_KEY‘] = ‘wtf csrf secret key‘app.config[‘SECRET_KEY‘] = ‘xxxxx‘
#允许上传的文件最大为10Mpatch_request_class(app,10*1024*1024)
class UploadForm(Form):    # 文件field设置为‘必须的’,过滤规则设置为‘set_mypic’
    upload = FileField(‘image‘, validators=[FileRequired(‘文件未选择!‘), FileAllowed(set_mypic, ‘只能上传图片!‘)])
    submit = SubmitField(‘上传‘)

@app.route(‘/‘, methods=(‘GET‘, ‘POST‘))def index():
    form = UploadForm()
    url = None    if form.validate_on_submit():
        filename = secure_filename(form.upload.data.filename)
        fileupload = set_mypic.save(form.upload.data, name=filename)
url = set_mypic.url(fileupload)
    return render_template(‘index.html‘, form=form, url=url)if __name__ == ‘__main__‘:
    app.run(debug=True)
-----------------------------------------
安全上传方法:
from flask_wtf import FlaskFormfrom flask_wtf.file import FileField, FileRequiredfrom werkzeug.utils import secure_filename
form = FlaskForm(csrf_enabled=False)
WTF_CSRF_ENABLED = False
WTF_CSRF_SECRET_KEY = ‘a random string‘
class PhotoForm(FlaskForm):    photo = FileField(validators=[FileRequired()])

@app.route(‘/upload‘, methods=[‘GET‘, ‘POST‘])def upload():    if form.validate_on_submit():        f = form.photo.data
        filename = secure_filename(f.filename)        f.save(os.path.join(app.instance_path, ‘photos‘, filename))        return redirect(url_for(‘index‘))    return render_template(‘upload.html‘, form=form)
------------------------------------------------
 html文件:
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
    {% block page_content %}    {{ wtf.quick_form(form, enctype="multipart/form-data") }} 
    <h4>文件上传成功!</h4>
    {% if url %}
    <br><img src="{{ url }}">    {% endif %}    {% endblock page_content %}
注:
上传文件的 form 必须是 POST 方法,并且 enctype=multipart/form-data。type=file。
如果使用 GET 方法,则只会上传文件名。
如何将照片资源与用户进行绑定?
使用轻量级 ORM 框架,peewee,使用两个字段 use_id、photo_name。将数据存储到数据库表格中。需要时可根据登录 user 的 id 获取到对应的 photo_name,然后使用 photos.url(photo_name) 进行加载。
时间: 2024-08-29 15:47:46

flask-uploads扩展的使用的相关文章

Flask 请求扩展

Flask 请求扩展 from flask import Flask,request app = Flask(__name__) before_request # 用before_request装饰的函数是执行响应函数之前执行, # 如果有多个before_request他会自上而下按照顺序执行 # 如果before_request有返回值,那后面的before_request都不会执行,且响应函数也不会执行 # 其有没有返回值都不会影响after_request的执行 @app.before_

Flask 的扩展

1. Flask-Script,为Flask程序提供了一个命令行解析器: (venv) $ pip install flask-script 2. Bootstrap(http://getbootstrap.com/)是客户端框架,详情看连接 集成Flask-Bootstrap的命令, (venv) $ pip install flask-bootstrap 3. Flask-Moment扩展,能把moment.js(在浏览器中渲染日期时间) 集成到Jinja2 模板中: # moment.js

Flask常用扩展介绍系列文章索引

这篇文章包含常用扩展介绍系列文章的索引目录. 关于扩展的基础知识可以阅读<Flask扩展的配置.初始化与管理>了解. *扩展列表按照写作时间排序 Flask-WTF 文章:关于Flask表单,我所知道的一切 GitHub主页:lepture/flask-wtf 文档:Flask-WTF - Flask-WTF 0.14 Flask-Uploads 文章:Flask文件上传(二):使用扩展实现 GitHub主页:maxcountryman/flask-uploads 文档:Flask-Uploa

Flask 【第四篇】使用Flask的扩展实现简单页面登录功能

from flask import Flask,render_template,request,redirect,session app = Flask(__name__,template_folder='templates') app.secret_key = "sdsfdsgdfgdfgfh" @app.before_request def process_request(): if request.path=="/login": return None if

flask框架----基于flask的扩展实现的简单的页面登录

废话不多说,直接上代码 from flask import Flask,render_template,request,redirect,session app = Flask(__name__,template_folder='templates') app.secret_key = "sdsfdsgdfgdfgfh" @app.before_request def process_request(): if request.path=="/login": ret

flask的扩展之信号量

# pip install blinker from blinker import signal s = signal('信号量') def each(num): print("each {}".format(num)) def full_singal(num): print("full_time {}".format(num)) s.connect(each) s.connect(full_singal, sender = 2) for num in range(

SAE flask及其扩展 bug指南

1. ImportError: No moudle named ext.bootstrap 导入依赖包失败 SAE会提供一种机制通过导入virtualenv.bundle来解决 此处有坑:官网文档中说也可以直接上传 virtualenv.bundle.zip,结果就报错 IOError: [Errno 20] Not a directory 直接上传正常形式的文件夹即可解决

flask及扩展源码解读

先放几篇文章 http://www.jianshu.com/p/adbea1783e2b http://blog.csdn.net/github_39605023/article/details/76020401 https://gxnotes.com/article/98739.html https://liuliqiang.info/archive http://python.jobbole.com/87450/ https://liuliqiang.info/post/flask-sour

第二篇 Flask基础篇之(闪现,蓝图,请求扩展,中间件)

本篇主要内容: 闪现 请求扩展 中间件 蓝图 写装饰器,常用 functools模块,帮助设置函数的元信息 import functools def wrapper(func): @functools.wraps(func) def inner(*args,**kwargs): return func(*args,**kwargs) return inner @wrapper def f1(): pass print(f1.__name__) # f1 续接第一篇 8.Flask之闪现 # 首先

Flask之邮件扩展

4.4 Flask-Mail 在开发过程中,很多应用程序都需要通过邮件提醒用户,Flask的扩展包Flask-Mail通过包装了Python内置的smtplib包,可以用在Flask程序中发送邮件. Flask-Mail连接到简单邮件协议(Simple Mail Transfer Protocol,SMTP)服务器,并把邮件交给服务器发送. 如下示例,通过开启QQ邮箱SMTP服务设置,发送邮件. from flask import Flask from flask_mail import Mai