Flask | 简单封装那个request,让它更通用
2017-08-24 本文已影响108人
HiWoo
用过Flask做网站的童鞋应该也有遇到过一个问题,也就是flask的request模块有多种获取前端提交的数据的方法:
request.json, request.form, request.values
很多时候我们只能规定前端js请求的方式(request method), 但是我们不能规则post请求,一定得用ajax的post。
所以在开发的时候就可能会出现一个问题,就是有时候获取到前端提交的数据是空的,然后发现request.json, request.form, request.values这个三个方法中并不是全部获取不到,取决于前端使用了什么样的 “技术方式” 提交。
这样下来好像我们这三个获取数据的方式都得用上,所以最简单的方式就是,我们自己写一一个新的获取提交数据的方式,把这3个方法简单的封装一下。
Code
1.那我们就写一个叫MyRequest()的类简单的封装flask的request的三个方法:
from flask import request
class MyRequest():
'''
简单封装request的的多个方法
'''
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() 来获取提交的数据。
如果你不想每次都在文件里导入 MyRequest()的话,也可以在每次请求前将MyRequest()实例赋值给flask的request 这样我们就可以通过request调用
如下
在Flask初始化程序里加入
@app.before_request
def req_before():
request.value = MyRequest()
使用时就可以如下调用
from flask import request
@api.route('/test', methods=['POST'])
def test():
page = request.value.all("page", 1) # 获取page,默认为1
kw = request.value.all("kw") # 获取kw,默认为None
# ...
retrun {}
这样就解决了上面我们说的问题。
你也可以分享你的编程故事或编程经验给我,我会筛选推送给其他小伙伴哦!
[互动] 今天我们聊一聊“你”的“编程路”