在Web開發中,請求和響應是兩個核心概念。簡單來說,請求是客戶端(比如瀏覽器)發給Flask應用的數據,而響應是Flask應用返回給客戶端的結果。理解這兩個對象,是掌握Flask開發的基礎。
一、請求對象:從客戶端獲取數據¶
當用戶在瀏覽器中訪問一個Flask路由時,瀏覽器會向Flask應用發送一個請求。Flask通過request對象來封裝這些請求數據,我們可以通過它獲取用戶輸入、請求方法、URL參數等信息。
1. 導入請求對象¶
要使用request對象,首先需要從flask模塊中導入它:
from flask import Flask, request
2. 請求對象的核心屬性¶
request對象包含了客戶端發送的幾乎所有信息,常用的核心屬性如下:
| 屬性/方法 | 作用描述 |
|---|---|
request.method |
獲取請求方法(如GET、POST、PUT等),大寫字符串 |
request.args |
獲取URL參數(對應GET請求,如http://example.com/?name=test中的name) |
request.form |
獲取表單數據(對應POST請求,如HTML表單提交的數據) |
request.cookies |
獲取客戶端發送的Cookie信息 |
request.headers |
獲取請求頭信息(如User-Agent、Content-Type等) |
3. 示例:處理GET和POST請求¶
app = Flask(__name__)
@app.route('/')
def index():
# 處理GET請求(URL參數)
name = request.args.get('name', 'Guest') # 獲取name參數,默認值爲'Guest'
return f"Hello, {name}!這是GET請求的響應"
@app.route('/submit', methods=['POST'])
def submit():
# 處理POST請求(表單數據)
username = request.form.get('username')
password = request.form.get('password')
if username and password:
return f"提交成功!用戶名:{username}"
else:
return "用戶名或密碼不能爲空", 400 # 返回400狀態碼(參數錯誤)
if __name__ == '__main__':
app.run(debug=True)
測試方式:
- 訪問http://localhost:5000/?name=小明,會返回“Hello, 小明!這是GET請求的響應”
- 通過POST表單提交數據(如用Postman或HTML表單),發送username=test和password=123,會返回“提交成功!用戶名:test”
二、響應對象:給客戶端返回結果¶
當Flask處理完請求後,需要通過響應對象將結果返回給客戶端。Flask的響應對象可以是字符串、HTML頁面、JSON數據、重定向等。
1. 直接返回字符串¶
最簡單的響應方式,Flask會自動將字符串封裝爲狀態碼爲200(成功)的響應:
@app.route('/hello')
def hello():
return "Hello, Flask!" # 狀態碼默認200
2. 返回HTML頁面¶
如果需要返回HTML頁面,需使用render_template函數(需先創建templates文件夾存放HTML文件):
from flask import render_template
@app.route('/page')
def page():
# 渲染templates文件夾下的index.html
return render_template('index.html', title="首頁")
示例templates/index.html:
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>這是一個HTML頁面</h1>
</body>
</html>
3. 返回JSON數據¶
如果需要返回JSON格式的數據(如API接口),使用jsonify函數(自動設置Content-Type: application/json):
from flask import jsonify
@app.route('/api/user')
def get_user():
user = {
"name": "小紅",
"age": 20,
"hobby": "編程"
}
return jsonify(user) # 返回JSON數據,狀態碼200
4. 重定向¶
如果需要跳轉到其他頁面(如登錄後跳轉首頁),使用redirect函數:
from flask import redirect, url_for
@app.route('/login')
def login():
# 重定向到首頁(url_for自動解析路由函數對應的URL)
return redirect(url_for('index'))
5. 自定義狀態碼¶
通過在返回值中添加狀態碼,可以明確告訴客戶端請求結果(如404、500等):
@app.route('/not_found')
def not_found():
return "頁面不存在", 404 # 狀態碼404:資源不存在
三、綜合示例:一個簡單的表單交互¶
下面通過一個完整示例,展示請求和響應的結合使用:
from flask import Flask, request, render_template, redirect, url_for, jsonify
app = Flask(__name__)
# 首頁:顯示錶單(GET請求)
@app.route('/')
def index():
return render_template('form.html') # 渲染templates/form.html
# 處理表單提交(POST請求)
@app.route('/submit', methods=['POST'])
def submit():
# 獲取表單數據
username = request.form.get('username')
email = request.form.get('email')
# 簡單驗證
if not username or not email:
return "用戶名和郵箱不能爲空!", 400 # 返回錯誤信息和400狀態碼
# 模擬處理數據(如存入數據庫)
print(f"收到用戶數據:{username}, {email}")
# 返回JSON響應(也可重定向到成功頁)
return jsonify({
"status": "success",
"message": f"歡迎 {username}!數據已接收"
})
if __name__ == '__main__':
app.run(debug=True)
templates/form.html(需在項目根目錄創建templates文件夾):
<!DOCTYPE html>
<html>
<head>
<title>用戶表單</title>
</head>
<body>
<h1>請填寫信息</h1>
<form method="POST" action="/submit">
<input type="text" name="username" placeholder="用戶名" required><br><br>
<input type="email" name="email" placeholder="郵箱" required><br><br>
<button type="submit">提交</button>
</form>
</body>
</html>
四、總結¶
- 請求對象(request):用於獲取客戶端發送的數據,核心關注
method(請求方法)、args(GET參數)、form(POST表單)。 - 響應對象(response):用於返回結果給客戶端,常見方式有字符串、HTML(
render_template)、JSON(jsonify)、重定向(redirect)。 - 關鍵原則:GET請求用於獲取數據(參數放在URL中),POST請求用於提交數據(參數放在請求體中);返回JSON用
jsonify,返回頁面用render_template。
通過本文,你應該對Flask的請求和響應對象有了基本瞭解。接下來可以嘗試自己編寫簡單的Web頁面或API接口,加深理解~