本文讲述在 Python Flask Web 框架中如何获取 POST 方法传送的数据。
作为一种HTTP请求方法,POST用于向指定的资源提交要被处理的数据。我们在某网站注册用户、写文章等时候,需要将数据传递到网站服务器中。并不适合将数据放到URL参数中,密码放到URL参数中容易被看到,文章数据又太多,浏览器不一定支持太长长度的URL。这时,一般使用POST方法。
本文使用python的requests库模拟浏览器。
安装方法:
建立Flask项目
按照以下命令建立Flask项目HelloWorld:
查看POST数据内容
以用户注册为例子,我们需要向服务器/register
传送用户名name
和密码password
。如下编写HelloWorld/server.py
。
@app.route('/register', methods=['POST'])
是指url/register
只接受POST方法。可以根据需要修改methods
参数,例如如果想要让它同时支持GET和POST,这样写:
浏览器模拟工具client.py
内容如下:
运行HelloWorld/server.py
,然后运行client.py
。client.py
将输出:
而HelloWorld/server.py
在终端中输出以下调试信息(通过print
输出):
前6行是client.py生成的HTTP请求头,由print(request.headers)
输出。
请求体的数据,我们通过print(request.stream.read())
输出,结果是:
解析POST数据
上面,我们看到post的数据内容是:
我们要想办法把我们要的name、password提取出来,怎么做呢?自己写?不用,Flask已经内置了解析器request.form
。
我们将服务代码改成:
执行client.py
请求数据,服务器代码会在终端输出:
request.form
会自动解析数据。
request.form['name']
和request.form.get('name')
都可以获取name
对应的值。对于request.form.get()
可以为参数default
指定值以作为默认值。所以:
输出的是默认值
如果name
有多个值,可以使用request.form.getlist('name')
,该方法将返回一个列表。我们将client.py改一下:
此时运行client.py
,print(request.form.getlist('name'))
将输出: