以用戶註冊爲例子,我們需要向服務器/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.快速入門