Flask請求方法:GET與POST請求處理實戰

一、什麼是Flask?

Flask是一個輕量級的Python Web框架,用它可以快速搭建Web應用。它雖然簡單,但功能強大,適合初學者入門Web開發。

二、爲什麼要了解GET和POST?

在Web開發中,瀏覽器與服務器之間通過HTTP請求傳遞數據。最常用的兩種請求方法是:

  • GET:用於獲取服務器數據(比如打開網頁、搜索信息)
  • POST:用於向服務器提交數據(比如登錄表單、上傳文件)

三、安裝Flask

首先確保已安裝Python,然後在命令行執行:

pip install flask

四、GET與POST的核心區別

對比項 GET POST
數據位置 放在URL中(如:/page?name=張三 放在請求體中(不顯示在URL)
用途 獲取數據 提交數據(如表單)
安全性 數據易泄露,不適合敏感信息 數據相對安全
緩存 可被瀏覽器緩存 通常不緩存

舉個生活例子:
- GET:你問服務員“今天有什麼菜?”(數據直接顯示在菜單上)
- POST:你說“我要一份牛排”(服務員默默記下來,不寫在菜單上)

五、實戰:用Flask處理登錄表單

我們將創建一個簡單的登錄頁面,用GET顯示錶單,用POST處理提交數據。

1. 項目結構

myapp/
├── app.py          # 主程序
└── templates/      # 模板文件夾
    └── login.html  # 登錄表單頁面

2. 編寫主程序(app.py)

# 導入Flask核心類和請求處理模塊
from flask import Flask, render_template, request

# 創建Flask應用實例
app = Flask(__name__)

# 定義路由,支持GET和POST請求
@app.route('/login', methods=['GET', 'POST'])
def login():
    # 判斷請求方法
    if request.method == 'POST':
        # 獲取表單數據(注意:表單字段名需與HTML中一致)
        username = request.form.get('username')
        password = request.form.get('password')

        # 簡單驗證
        if username and password:
            return f"登錄成功!歡迎回來,{username}!"
        else:
            return "用戶名或密碼不能爲空!"
    else:
        # GET請求:返回登錄表單頁面
        return render_template('login.html')

# 啓動應用(debug=True表示開發模式,代碼修改後自動重啓)
if __name__ == '__main__':
    app.run(debug=True)

3. 創建登錄表單模板(templates/login.html)

在templates文件夾下新建login.html:

<!DOCTYPE html>
<html>
<head>
    <title>用戶登錄</title>
    <style>
        body { font-family: Arial; margin: 20px; }
        .form-group { margin-bottom: 10px; }
    </style>
</head>
<body>
    <h1>用戶登錄</h1>
    <!-- 表單提交方法爲POST,提交到當前路由 -->
    <form method="POST" action="/login">
        <div class="form-group">
            <label>用戶名:</label>
            <input type="text" name="username" required>
        </div>
        <div class="form-group">
            <label>密碼:</label>
            <input type="password" name="password" required>
        </div>
        <button type="submit">登錄</button>
    </form>
</body>
</html>

六、運行與測試

  1. 在命令行執行:python app.py
  2. 訪問瀏覽器:http://localhost:5000/login
  3. 輸入用戶名和密碼,點擊登錄按鈕

關鍵知識點解析:

  • 路由參數methods=['GET', 'POST']讓同一個路由支持兩種請求方法
  • 表單提交method="POST"表示表單數據通過請求體發送,action="/login"指定提交目標路由
  • 數據獲取request.form.get('username')從POST請求體中提取表單字段(get()方法安全處理空值)
  • 模板渲染render_template('login.html')讀取templates文件夾下的HTML模板文件

七、常見問題與注意事項

  1. 如何只允許POST請求?
    修改路由爲:@app.route('/login', methods=['POST']),此時GET請求會返回405錯誤

  2. 如何獲取URL參數(GET請求數據)?
    使用request.args.get('參數名'),例如:

   @app.route('/search')
   def search():
       keyword = request.args.get('keyword')  # 獲取URL參數:/search?keyword=Python
       return f"搜索內容:{keyword}"
  1. 安全提示
    敏感數據(如密碼)必須用POST,且生產環境需開啓HTTPS。實際項目中還需添加CSRF保護(如使用Flask-WTF)。

八、擴展練習

嘗試修改代碼,實現:
- 支持同時處理GET和POST的用戶註冊頁面
- 添加“記住我”選項(通過表單隱藏字段)
- 錯誤處理優化(如重複提交、數據格式錯誤)

通過以上示例,你已經掌握了Flask中GET和POST請求的基本處理方法。接下來可以嘗試結合數據庫、會話管理等功能,進一步提升Web應用開發能力!

小夜