使用Flask搭建简单的服务器

以用户注册为例子,我们需要向服务器/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.pyclient.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.pyprint request.form.getlist('name')将输出:[u'letian', u'letian2'] 

注意:端口号如果冲突,使用命令netstat -nltp|grep 8查看端口使用状态,选择空闲的端口;如果要使用特定的端口(比如5000),使用命令netstat -tunlp | grep 5000查看占用端口5000的应用,然后kill占用的进程。

上传文件、传json等更多详情请参考:

1.快速入门

2.Flask之处理客户端通过POST方法传送的数据

发布了89 篇原创文章 · 获赞 210 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/i_chaoren/article/details/86755862