Flask參數解析、請求鉤子

轉載請註明出處 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.Requestflask

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() 夜深了,下回分解

相關文章
相關標籤/搜索