一、什么是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应用开发能力!