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应用开发能力!

小夜