zoukankan      html  css  js  c++  java
  • 【Flask】WTForms文件上传下载

    # 文件上传笔记:
    1. 在模版中,form表单中,需要指定`encotype='multipart/form-data'`才能上传文件。
    2. 在后台如果想要获取上传的文件,那么应该使用`request.files.get('avatar')`来获取。
    3. 保存文件之前,先要使用`werkzeug.utils.secure_filename`来对上传上来的文件名进行一个过滤。这样才能保证不会有安全问题。
    4. 获取到上传上来的文件后,使用`avatar.save(路径)`方法来保存文件。、
    5. 从服务器上读取文件,应该定义一个url与视图函数,来获取指定的文件。在这个视图函数中,使用`send_from_directory(文件的目录,文件名)`来获取。
    示例代码如下:

     1 # coding:utf-8
     2 from flask import Flask, request, render_template, send_from_directory
     3 import os
     4 from werkzeug.utils import secure_filename
     5 
     6 app = Flask(__name__)
     7 
     8 dirpath = os.path.dirname(__file__)
     9 
    10 
    11 @app.route('/')
    12 def hello_world():
    13     return 'Hello World!'
    14 
    15 
    16 @app.route('/upload/', methods=['GET', 'POST'])
    17 def upload():
    18     if request.method == 'GET':
    19         return render_template('upload.html')
    20     else:
    21         # 获取描述信息
    22         desc = request.form.get('desc')
    23         avatar = request.files.get('avatar')
    24         avatar.save(os.path.join(dirpath+'\images', avatar.filename))
    25         print desc
    26         return "file upload success."
    27 
    28 
    29 @app.route('/images/<filename>/')
    30 def get_image(filename):
    31     return send_from_directory(dirpath+"\images", filename)
    32 
    33 if __name__ == '__main__':
    34     app.run(debug=True)


    ### 对上传文件使用表单验证:
    1. 定义表单的时候,对文件的字段,需要采用`FileField`这个类型。
    2. 验证器应该从`flask_wtf.file`中导入。`flask_wtf.file.FileRequired`是用来验证文件上传是否为空。`flask_wtf.file.FileAllowed`用来验证上传的文件的后缀名。
    3. 在视图文件中,使用`from werkzeug.datastructures import CombinedMultiDict`来把`request.form`与`request.files`来进行合并。再传给表单来验证。
    示例代码如下:

    1 from werkzeug.datastructures import CombinedMultiDict
    2 form = UploadForm(CombinedMultiDict([request.form,request.files]))
  • 相关阅读:
    NOIP2013题解
    NOIP2012题解
    NOIP2011题解
    NOIP2010题解
    【BZOJ2302】[HAOI2011]Problem C(动态规划)
    【BZOJ2299】[HAOI2011]向量(数论)
    【BZOJ2285】[SDOI2011]保密(分数规划,网络流)
    【BZOJ2246】[SDOI2011]迷宫探险(搜索,动态规划)
    【BZOJ2281】[SDOI2011]黑白棋(博弈论,动态规划)
    【BZOJ2245】[SDOI2011]工作安排(费用流)
  • 原文地址:https://www.cnblogs.com/chen0427/p/8870437.html
Copyright © 2011-2022 走看看