【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]))
相關文章
相關標籤/搜索