使用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方法傳送的數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章