Flask 使用 request 處理GET POST請求、上傳文件
- 2019 年 11 月 14 日
- 筆記
在Django框架開發中,request對象就是用來處理GETPOST請求的關鍵對象,而Flask框架也是一樣的。
下面來看看request對象的常用方法。
request對象的常用方法
request對象的導入:
from flask import request
Flask 框架中的 request 對象保存了一次HTTP請求的一切資訊。那麼這個HTTP請求中可能會是GETPOST請求,以及還要考慮如何獲取各種請求體或者URL參數。
而對應著這些參數的獲取或者GET/POST方法的區分,下面都有對應的常用方法來進行對應的處理。
常用的方法如下:

- 如果是
json
格式的請求數據,則是採用request.data
來獲取請求體的字元串。 - 如果是
form
表單的請求體,那麼則可以使用request.form
來獲取參數。 - 如果是
url
參數,例如:url?param1=xx¶m2=xx
,那麼則可以使用request.args
來獲取參數。 - 如果需要區分
GETPOST
請求方法,則可以使用request.method
來進行判斷區分。 - 如果需要接收上傳的文件,則可以使用
request.files
來獲取上傳的文件資訊。
下面來看看示例方法。
Json請求: 使用 request.data 獲取請求體
處理視圖函數如下:
from flask import Flask, current_app, redirect, url_for, request import json # 實例化app app = Flask(import_name=__name__) # 通過methods設置POST請求 @app.route('/json', methods=["POST"]) def json_request(): # 接收處理json數據請求 data = json.loads(request.data) # 將json字元串轉為dict user_name = data['user_name'] user_age = data['user_age'] return "user_name = %s, user_age = %s" % (user_name,user_age) if __name__ == '__main__': app.run(debug=True)
使用postman模擬請求如下:

form表單請求:request.form 獲取請求參數
在flask中獲取這個form的請求參數示例如下:
from flask import Flask, current_app, redirect, url_for, request # 實例化app app = Flask(import_name=__name__) # 通過methods設置POST請求 @app.route('/form', methods=["POST"]) def form_request(): # 接收post請求的form表單參數 user_name = request.form.get('user_name') user_age = request.form.get('user_age') return "user_name = %s, user_age = %s" % (user_name,user_age) if __name__ == '__main__': app.run(debug=True)
一般form表單的請求都是使用post請求,下面可以使用postman來進行請求模擬,如下:

還有 form x-www-form-urlencoded 請求,如下:

上面form-data
是可以包含文件類型的form表單,而x-www-form-urlencoded
只是單純 key - value
的數據。
而處理的業務程式碼是跟上面的一樣的。
form 表單請求中存在同一個參數名多個值的情況
這種請求下可以使用request.form.getlist()
來獲取同名多個參數,如下:
# 通過methods設置POST請求 @app.route('/form', methods=["POST"]) def form_request(): # 接收post請求的form表單參數 user_name = request.form.get('user_name') user_age = request.form.get('user_age') user_name_list = request.form.getlist('user_name') print(user_name_list) return "user_name = %s, user_age = %s, user_name_list = %s" % (user_name,user_age, user_name_list)
使用postman請求如下:

URL請求參數: request.args
在對於url上的?user_name=libai&user_age=17
該類的參數,則是使用request.args
來獲取。 示例程式碼如下:
# 通過methods設置GET請求 @app.route('/args', methods=["GET"]) def args_request(): # 接收處理GET數據請求 user_name = request.args.get('user_name') user_age = request.args.get('user_age') print("user_name = %s, user_age = %s" % (user_name,user_age)) return "user_name = %s, user_age = %s" % (user_name,user_age)
使用postman模擬GET請求如下:

上傳文件請求:request.files
from flask import Flask, request # 實例化app app = Flask(import_name=__name__) # 通過methods設置POST請求 @app.route('/upload_file', methods=["POST"]) def upload_file(): # 接收post請求上傳的文件 file = request.files.get('file') if file is None: # 表示沒有發送文件 return "未上傳文件" # 直接使用上傳的文件對象保存 file.save("file.jpg") return "上傳文件成功!" if __name__ == '__main__': app.run(debug=True)
使用postman上傳文件如下:
