导入
表单与请求简介
在本节课中,我们将学习 Flask 中处理表单的两种方法。
在 Flask 中处理表单
Flask 包本身并未提供处理表单的内置方法。开发者通常通过以下两种方式来处理表单数据:
- 通过
request对象 - 通过
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>
上述模板中,我们创建了一个包含 邮箱 和 密码 字段的简单表单,并添加了一个提交按钮用于提交登录信息。接下来,我们将这个表单连接到一个新的登录路由。
创建登录新路由
在下面的例子中,我们将:
- 在应用中添加一个
/login路由。 - 创建
login.html并继承自base.html。
📌 注意: 在第 9 行的
form标签内,我们添加了action属性,其值为{{url_for('login')}}。这会将表单提交请求定向到login视图函数。
添加 POST 和 GET 方法
💡 观察: 当你在登录页面点击
提交按钮时,会出现一条错误消息。
错误提示如下:

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 列表,列出了允许的请求方法。
完整实现
修复上述错误后,完整的程序代码如下所示。