Logo
Section 1 / 11

表单与请求简介

在本节课中,我们将学习 Flask 中处理表单的两种方法。

导入

表单与请求简介

在本节课中,我们将学习 Flask 中处理表单的两种方法。

在 Flask 中处理表单

Flask 包本身并未提供处理表单的内置方法。开发者通常通过以下两种方式来处理表单数据:

  1. 通过 request 对象
  2. 通过 Flask-WTF 扩展

在本节课中,我们将简要讨论第一种方式。

使用 request 对象

这里我们以一个简单的 登录 表单为例。本节课将创建该表单所需的模板和路由,下一节课中再使用 request 对象进行数据处理。现在开始。

创建 HTML 模板

考虑一个简单的登录页面模板:

1<h1>登录</h1> 2<form method="POST"> 3 邮箱:<br> 4 <input type="text" name="email" > 5 <br> 6 密码:<br> 7 <input type="password" name="password" > 8 <br><br> 9 <input type="submit" value="登录"> 10</form>

上述模板中,我们创建了一个包含 邮箱 和 密码 字段的简单表单,并添加了一个提交按钮用于提交登录信息。接下来,我们将这个表单连接到一个新的登录路由。

创建登录新路由

在下面的例子中,我们将:

  1. 在应用中添加一个 /login 路由。
  2. 创建 login.html 并继承自 base.html。

📌 注意: 在第 9 行的 form 标签内,我们添加了 action 属性,其值为 {{url_for('login')}}。这会将表单提交请求定向到 login 视图函数。

添加 POST 和 GET 方法

💡 观察: 当你在登录页面点击 提交 按钮时,会出现一条错误消息。

错误提示如下:

Screen Shot 2019-09-17 at 11.35.24 AM.png
Screen Shot 2019-09-17 at 11.35.24 AM.png

出现该错误的原因是:当前 login 视图无法处理从表单发送的 POST 请求。默认情况下,route() 装饰器只接受 GET 请求。因此,我们需要为 login 视图的 route() 装饰器额外添加一个名为 methods 的参数:

1@app.route("/login", methods=["GET", "POST"])

其中 methods 参数是一个 Python 列表,列出了允许的请求方法。

完整实现

修复上述错误后,完整的程序代码如下所示。

Flask 简介

使用请求对象处理数据