輕鬆學Flask:請求與響應對象詳解

在Web開發中,請求響應是兩個核心概念。簡單來說,請求是客戶端(比如瀏覽器)發給Flask應用的數據,而響應是Flask應用返回給客戶端的結果。理解這兩個對象,是掌握Flask開發的基礎。

一、請求對象:從客戶端獲取數據

當用戶在瀏覽器中訪問一個Flask路由時,瀏覽器會向Flask應用發送一個請求。Flask通過request對象來封裝這些請求數據,我們可以通過它獲取用戶輸入、請求方法、URL參數等信息。

1. 導入請求對象

要使用request對象,首先需要從flask模塊中導入它:

from flask import Flask, request

2. 請求對象的核心屬性

request對象包含了客戶端發送的幾乎所有信息,常用的核心屬性如下:

屬性/方法 作用描述
request.method 獲取請求方法(如GETPOSTPUT等),大寫字符串
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=testpassword=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接口,加深理解~

小夜