用過Flask做網(wǎng)站的童鞋應(yīng)該也有遇到過一個(gè)問題诡宗,也就是flask的request模塊有多種獲取前端提交的數(shù)據(jù)的方法:
request.json, request.form, request.values
很多時(shí)候我們只能規(guī)定前端js請求的方式(request method), 但是我們不能規(guī)則post請求,一定得用ajax的post。
所以在開發(fā)的時(shí)候就可能會出現(xiàn)一個(gè)問題闷哆,就是有時(shí)候獲取到前端提交的數(shù)據(jù)是空的腰奋,然后發(fā)現(xiàn)request.json, request.form, request.values這個(gè)三個(gè)方法中并不是全部獲取不到,取決于前端使用了什么樣的 “技術(shù)方式” 提交抱怔。
這樣下來好像我們這三個(gè)獲取數(shù)據(jù)的方式都得用上劣坊,所以最簡單的方式就是,我們自己寫一一個(gè)新的獲取提交數(shù)據(jù)的方式屈留,把這3個(gè)方法簡單的封裝一下局冰。
Code
1.那我們就寫一個(gè)叫MyRequest()的類簡單的封裝flask的request的三個(gè)方法:
from flask import request
class MyRequest():
'''
簡單封裝request的的多個(gè)方法
'''
def all(self, key=None, d_value=None):
'''
all parameter
:param key: key
:param d_value: None
:return:
'''
if not key:
return request.json,request.form,request.values
elif request.json and key in request.json:
_value = request.json[key]
elif key in request.form:
_value = request.form[key]
elif key in request.values:
_value = request.values[key]
else:
_value = d_value
return _value
def list(self, key=None, d_value=None):
'''
all parameter
:param key: key
:param d_value: None
:return:
'''
if not key:
return request.json,\
request.form,\
request.values
elif request.json and key in request.json:
_value = request.json[key]
elif key in request.form:
_value = request.form.getlist(key)
elif key in request.values:
_value = request.values.getlist(key)
else:
_value = d_value
return _value
這樣我們就可以使用這里的 all() 和list() 來獲取提交的數(shù)據(jù)。
如果你不想每次都在文件里導(dǎo)入 MyRequest()的話灌危,也可以在每次請求前將MyRequest()實(shí)例賦值給flask的request 這樣我們就可以通過request調(diào)用
如下
在Flask初始化程序里加入
@app.before_request
def req_before():
request.value = MyRequest()
使用時(shí)就可以如下調(diào)用
from flask import request
@api.route('/test', methods=['POST'])
def test():
page = request.value.all("page", 1) # 獲取page康二,默認(rèn)為1
kw = request.value.all("kw") # 獲取kw,默認(rèn)為None
# ...
retrun {}
這樣就解決了上面我們說的問題勇蝙。
你也可以分享你的編程故事或編程經(jīng)驗(yàn)給我沫勿,我會篩選推送給其他小伙伴哦!
[互動(dòng)] 今天我們聊一聊“你”的“編程路”