一、什麼是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>
六、運行與測試¶
- 在命令行執行:
python app.py - 訪問瀏覽器:
http://localhost:5000/login - 輸入用戶名和密碼,點擊登錄按鈕
關鍵知識點解析:¶
- 路由參數:
methods=['GET', 'POST']讓同一個路由支持兩種請求方法 - 表單提交:
method="POST"表示表單數據通過請求體發送,action="/login"指定提交目標路由 - 數據獲取:
request.form.get('username')從POST請求體中提取表單字段(get()方法安全處理空值) - 模板渲染:
render_template('login.html')讀取templates文件夾下的HTML模板文件
七、常見問題與注意事項¶
-
如何只允許POST請求?
修改路由爲:@app.route('/login', methods=['POST']),此時GET請求會返回405錯誤 -
如何獲取URL參數(GET請求數據)?
使用request.args.get('參數名'),例如:
@app.route('/search')
def search():
keyword = request.args.get('keyword') # 獲取URL參數:/search?keyword=Python
return f"搜索內容:{keyword}"
- 安全提示:
敏感數據(如密碼)必須用POST,且生產環境需開啓HTTPS。實際項目中還需添加CSRF保護(如使用Flask-WTF)。
八、擴展練習¶
嘗試修改代碼,實現:
- 支持同時處理GET和POST的用戶註冊頁面
- 添加“記住我”選項(通過表單隱藏字段)
- 錯誤處理優化(如重複提交、數據格式錯誤)
通過以上示例,你已經掌握了Flask中GET和POST請求的基本處理方法。接下來可以嘗試結合數據庫、會話管理等功能,進一步提升Web應用開發能力!