人人可以学Python程序员

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 {}

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

你也可以分享你的编程故事或编程经验给我,我会筛选推送给其他小伙伴哦!
[互动] 今天我们聊一聊“你”的“编程路”

上一篇下一篇

猜你喜欢

热点阅读