在Flask中,當用戶訪問我們的應用時,會發送各種請求(比如GET、POST等),而我們需要獲取用戶在請求中傳遞的參數和數據,這時候就需要用到請求對象。Flask通過request對象幫我們封裝了這些信息,讓我們可以輕鬆獲取用戶輸入的內容。
1. 導入請求對象¶
首先,我們需要從Flask中導入request對象。在你的Flask應用文件(比如app.py)中,開頭部分通常會有:
from flask import Flask, request
app = Flask(__name__)
這樣我們就可以在路由函數中使用request來處理請求數據了。
2. 獲取查詢字符串參數(URL參數)¶
當用戶通過URL的查詢字符串傳遞參數時(比如/hello?name=Alice&age=18),這些參數會被放在查詢字符串中,Flask通過request.args來獲取。
示例:獲取GET請求的查詢參數¶
@app.route('/hello')
def hello():
# 獲取查詢參數中的name,默認值爲"Guest"
name = request.args.get('name', 'Guest')
# 獲取年齡,指定類型爲整數,默認值爲0
age = request.args.get('age', 0, type=int)
return f"Hello, {name}! You are {age} years old."
此時,當用戶訪問/hello?name=Bob&age=20時,頁面會返回Hello, Bob! You are 20 years old.。
request.args是一個類似字典的對象,存儲了所有查詢參數。- 使用
get('參數名')獲取參數,第二個參數是默認值(參數不存在時返回)。 - 通過
type=int可以指定參數類型(如數字),如果參數不存在或類型錯誤,會返回默認值。
3. 獲取表單數據(POST請求)¶
當用戶通過HTML表單(如登錄表單)提交數據時,通常使用POST請求。這時候需要在路由中指定methods=['POST'],並通過request.form獲取表單數據。
示例:處理POST表單提交¶
@app.route('/login', methods=['POST'])
def login():
# 獲取表單中的用戶名和密碼
username = request.form.get('username')
password = request.form.get('password')
if username and password:
return f"Login successful! Welcome, {username}."
else:
return "Please fill in all fields.", 400 # 返回400錯誤碼
此時,前端需要以application/x-www-form-urlencoded格式提交數據(這是HTML表單的默認格式)。比如用Postman模擬POST請求,在Body中選擇form-data或x-www-form-urlencoded,填寫username和password參數。
4. 獲取JSON數據(POST請求)¶
如果用戶通過POST請求發送JSON格式的數據(比如前端用JavaScript的fetch發送JSON),需要使用request.get_json()來獲取。
示例:處理JSON數據¶
@app.route('/add_user', methods=['POST'])
def add_user():
# 檢查是否是JSON請求
if not request.is_json:
return "Request must be JSON", 415 # 415表示不支持的媒體類型
# 獲取JSON數據
data = request.get_json()
username = data.get('username')
age = data.get('age')
if username and age:
return f"User {username} added. Age: {age}"
else:
return "Missing username or age", 400
此時,前端發送的JSON應該類似:
{
"username": "Charlie",
"age": 22
}
request.is_json用於判斷請求是否是JSON格式。request.get_json()會返回解析後的Python字典,如果請求不是JSON,會返回None。- 可以設置
request.get_json(force=True)強制解析,即使Content-Type不是application/json(但不推薦,可能導致錯誤)。
5. 總結關鍵點¶
- 查詢字符串(GET參數):用
request.args,對應URL中的?後參數。 - 表單數據(POST):用
request.form,注意路由需指定methods=['POST']。 - JSON數據(POST):用
request.get_json(),需先判斷是否是JSON(request.is_json)。 - 使用
get()方法時,儘量提供默認值,避免None導致錯誤。 request對象還有其他屬性(如request.method獲取請求方法,request.headers獲取請求頭),但獲取參數時常用以上方法。
小練習¶
嘗試修改上面的示例,比如:
1. 寫一個路由,獲取URL中的id參數並返回其平方(注意類型轉換)。
2. 寫一個POST路由,接收JSON數據,返回數據的長度。
通過這些練習,你就能更熟練地處理用戶輸入和參數啦!