Flask | 简单封装那个request,让它更通用

Posted 人人可以学Python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask | 简单封装那个request,让它更通用相关的知识,希望对你有一定的参考价值。


  > 你也可以分享你的编程故事编程经验给我,我会筛选推送给其他小伙伴哦!

[互动] 


用过Flask做网站的童鞋应该也有遇到过一个问题,也就是flask的request模块有多种获取前端提交的数据的方法:

request.json,  request.form,   request.values


很多时候我们只能规定前端js请求的方式(request method), 但是我们不能规则post请求,一定得用ajax的post。


所以在开发的时候就可能会出现一个问题,就是有时候获取到前端提交的数据是空的,然后发现request.json, request.form, request.values这个三个方法中并不是全部获取不到,取决于前端使用了什么样的 “技术方式” 提交。


这样下来好像我们这三个获取数据的方式都得用上,所以最简单的方式就是,我们自己写一一个新的获取提交数据的方式,把这3个方法简单的封装一下。

  Code



  • 那我们就写一个叫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 {}


这样就解决了上面我们说的问题。


 你也可以分享你的编程故事编程经验给我,我会筛选推送给其他小伙伴哦!

[互动] 

以上是关于Flask | 简单封装那个request,让它更通用的主要内容,如果未能解决你的问题,请参考以下文章

flask-上下文3-梳理

flask之上下文管理

Flask 和 requests 搭建一个简单的API服务

Flask之视图

请简化我的代码或让它更高级 Python 程序员

Flask教程 —— Web表单(上)