【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(文件的目录,文件名)`来获取。
示例代码以下:

html

 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`来进行合并。再传给表单来验证。
示例代码以下:flask

1 from werkzeug.datastructures import CombinedMultiDict 2 form = UploadForm(CombinedMultiDict([request.form,request.files]))
相关文章
相关标签/搜索