以用户注册为例子,我们需要向服务器/register
传送用户名name
和密码password
。
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'hello world'
@app.route('/register', methods=['POST'])
def register():
print request.headers
print request.form
print request.form['name']
print request.form.get('name')
print request.form.getlist('name')
print request.form.get('nickname', default='little apple')
return 'welcome'
if __name__ == '__main__':
app.run(debug=True)
@app.route('/register', methods=['POST'])
是指url/register
只接受POST方法。也可以根据需要修改methods
参数,例如
@app.route('/register', methods=['GET', 'POST']) # 接受GET和POST方法
用Python的requests库模拟客户端,客户端client.py
内容如下:
import requests
user_info = {'name': 'letian', 'password': '123'}
r = requests.post("http://127.0.0.1:5000/register", data=user_info)
print r.text
运行index.py
,然后运行client.py
。client.py
将输出:welcome
而index.py
在终端中输出以下调试信息(通过print
输出):
Content-Length: 24
User-Agent: python-requests/2.2.1 CPython/2.7.6 Windows/8
Host: 127.0.0.1:5000
Accept: */*
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate, compress
ImmutableMultiDict([('password', u'123'), ('name', u'letian')])
letian
letian
[u'letian']
little apple
前6行是client.py生成的HTTP请求头,由于print request.headers
输出。
print request.form
的结果是:
ImmutableMultiDict([('password', u'123'), ('name', u'letian')])
这是一个ImmutableMultiDict
对象。关于request.form
,更多内容请参考flask.Request.form。关于ImmutableMultiDict
,更多内容请参考werkzeug.datastructures.MultiDict。
request.form['name']
和request.form.get('name')
都可以获取name
对应的值。对于request.form.get()
可以为参数default
指定值以作为默认值。所以:
print request.form.get('nickname', default='little apple')
输出的是默认值:little apple
如果name
有多个值,可以使用request.form.getlist('name')
,该方法将返回一个列表。我们将client.py改一下:
import requests
user_info = {'name': ['letian', 'letian2'], 'password': '123'}
r = requests.post("http://127.0.0.1:5000/register", data=user_info)
print r.text
此时运行client.py
,print request.form.getlist('name')
将输出:[u'letian', u'letian2']
注意:端口号如果冲突,使用命令netstat -nltp|grep 8查看端口使用状态,选择空闲的端口;如果要使用特定的端口(比如5000),使用命令netstat -tunlp | grep 5000查看占用端口5000的应用,然后kill占用的进程。
上传文件、传json等更多详情请参考:
1.快速入门
2.Flask之处理客户端通过POST方法传送的数据