轉載請註明出處 http://www.javashuo.com/article/p-anixdrgd-t.html html
參數解析數據庫
Flask的參數解析主要用Request完成(from flask import request)。json
request的Api詳解見官方文檔http://flask.pocoo.org/docs/1.0/api/#flask.Request。flask
request的使用詳解見官方文檔http://flask.pocoo.org/docs/1.0/reqcontext/。api
此處主要介紹一些經常使用的參數解析相關的內容。服務器
request中的幾個重要變量:session
request.data 字符串類型 存放請求的字符串數據,未經處理多線程
request.files MultiDict類型 存放全部的上傳文件列表app
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() 夜深了,下回分解