轉載請注明出處 https://www.cnblogs.com/chenxianpao/p/9949279.html
參數解析
Flask的參數解析主要用Request完成(from flask import request)。
request的Api詳解見官方文檔http://flask.pocoo.org/docs/1.0/api/#flask.Request。
request的使用詳解見官方文檔http://flask.pocoo.org/docs/1.0/reqcontext/。
此處主要介紹一些常用的參數解析相關的內容。
request中的幾個重要變量:
request.data 字符串類型 存放請求的字符串數據,未經處理
request.files MultiDict類型 存放所有的上傳文件列表
request.form ImmutableMultiDict類型 存放表單數據
request.is_json 函數 判斷數據是否為json數據
request.is_multiprocess 函數 判斷此應用是否為多進程WSGI服務
request.is_multithread 函數 判斷此應用是否為多線程WSGI服務
request.json Dict類型 存放json類型的數據
request.view_args Dict類型 存放URL中定義的變量 比如/login/<string: username>,會存放{"username": "xxx"}
request.args ImmutableMultiDict類型 存放URL中?后面的變量
request.values CombinedMultiDict類型 是args和form的組合
拿常用的GET、POST、PUT、DELETE方法舉例。
GET方法:
變量名不重復型:/login?username=cxp&password=cxp
username = request.args.get('username', '') password = request.args.get('password', '')
變量名重復型:/login?username=cxp&password=cxp&password=cpp
params = dict() for i, j in request.args.iterlists(): params[i] = j print params # {'username': [u'cxp'], 'password': [u'cxp', u'cpp']}
request.data/request.form/request.json無數據,request.args和request.values存放數據。
POST、PUT、DETELTE方法:
form-data型:/login
username = request.form.get('username', '') password = request.form.get('password', '')
request.data/request.args/request.json都為空,僅request.form和request.values有數據。
json型:/login
args = request.json
或者
args = request.get_json()
request.args/request.form/request.values為空,request.data為裸數據,request.json有字典數據。
其實准確的說不應該用HTTP方法來做分類。如果是URL中直接帶參數的方式,接口中都可以用request.args變量去獲取參數。如果是form-data的類型,則可以用request.form變量去獲取參數。如果是json類型,則用request.json去獲取參數。另外因為Flask可能會用wtforms來做表單驗證,建議接口中的key為固定值而非變量,否則做表單驗證時會比較不方便。
鈎子函數
before_request() 注冊一個函數,在每個請求之前執行。通常用於數據庫的連接或者從session中獲取信息等操作。
@app.before_request def bf_request(): g.string = 'before_request'
before_first_request() 注冊一個函數,在處理第一個請求之前運行。通用用於僅需執行一次的操作,而且需要第一次請求來觸發。
@app.before_first_request def bf_first_request(): g.string = 'before_first_request'
after_request() 注冊一個函數,在每次請求之后運行。注冊的函數至少需要含有一個參數,這個參數實際上為服務器的響應,且函數中需要返回這個響應參數。
@app.after_request def af_request(param): return param
teardown_request() 注冊一個函數,同樣在每次請求之后運行。注冊的函數至少需要含有一個參數,這個參數實際上為服務器的響應,且函數中需要返回這個響應參數。
@app.teardown_request def td_request(param): return param
teardown_appcontext() 夜深了,下回分解
before_app_request() 夜深了,下回分解
before_app_first_request() 夜深了,下回分解