Flask參數解析、請求鈎子


轉載請注明出處 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() 夜深了,下回分解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM