应用flask开发restful设计风格的api时,较为功能强大的参数校验技巧。

Flask开发技巧之参数校验

文件目录
  • Flask开发技巧之参数校验
    • 1、要求参数归类
    • 2、解决方法应用到的库
    • 3 、对于url查看参数与一般json格式
    • 4、对于繁杂json格式数据信息

自己平常开发中应用的 ,或是学习培训到的一些flask开发技巧梳理,必须现有比较扎扎实实的flask基本。

1、要求参数归类

一般来说,前端开发推送回来的要求中 ,大概包括下列三种种类的参数,分别是url路径参数,url查看参数 ,也有现阶段前后端分离开发中最普遍的json格式的数据信息 。

  • url路径参数
/v1/user/1

url路径参数即类似所述事例中的参数,立即带在url路径中,可转变 ,flask对于这类参数,早已立即出示了适用,例:

@app.route('/v1/user/<int:id>')
  • url查看参数
/v1/user?page=1&pageSize=10

类似这类带在url中的疑问后边的键值对而且用&联接的参数称之为url查看参数

  • json格式的参数
{
    "name": "xiaowang",
    "age": 1
}

而json格式的参数就更无需多讲过 ,header中含有Content-Type:Application/json传送回来的json格式的数据信息就这样的。

2 、解决方法应用到的库

这儿大家为了更好地处理参数校验的难题 ,一定是要将参数校验的一部分抽身出去,依照面向对象编程的观念,掩藏参数校验的实际全过程 ,交到特殊的类去处理。那样,我们在主视图涵数中,不容易出現沉余的参数校验编码 ,会使全部主视图涵数看起来简洁明了最易读 。

这儿大家必须安裝2个库

pip install WTForms
pip install WTForms-JSON

事后方式创建在wtforms库上拓展,全部wtforms库原来的实际操作,所有都合理 ,能够再次应用。如果不了解wtforms,必须先学习培训一下。

3、对于url查看参数与一般json格式

最先解释一下,历经我的研究(自己能力有限 ,很有可能没法拓展完成),应用一般的wtforms库,没法接纳繁杂格式的json数据信息 ,只有接纳一般格式的json数据信息及其url查看参数开展校验 。

  • 一般格式的json参数举例说明
{
    "name": "xiaowang",
    "age": 1,
    "address": "beijing"
}
  • 繁杂格式的json参数举例说明
{
    "category": {
        "category_name": "电脑上",
        "category_id": 2
    },
    "address_list": [
        "beijing",
        "shanghai"
    ]
    "name": "xiaohong",
    "age": 1,
}

完成方式 ,承继wtforms库文件的Form,完成自身的基类参数认证类BaseForm

class BaseForm(Form):
    def __init__(self):
        data = request.get_json()
        args = request.args.to_dict()
        super(BaseForm, self).__init__(data=data, **args)

    def validate_for_api(self):
        valid = super(BaseForm, self).validate()
        if not valid:
            raise ParameterException(msg=self.errors)
        return self

这儿开展一下表明,BaseForm的__init__方式实例化目标的情况下最先根据flask中的request目标将一般json数据信息和查看参数args取得 ,根据启用父类的方式将参数复位。

而validate_for_api()方式则启用父类中的validate()开展参数校验,假如校验結果不通过,那麼将错误报告放进msg交到出现异常类400解决 ,错误处理大家早已在上一篇详尽叙述。假如校验根据,那麼就将校验进行的form回到 。

应用举例说明

对于一个要求url为

/v1/user?user_id=1

要求体为

{
    "username": "xiaoming",
    "age": 1
}

那麼应用以下类:

class UserForm(BaseForm):
    user_id = IntegerField()
    username = StringField()
    age = IntegerField()


form = UserForm().validate_for_api()

就可以进行参数校验,假如校验失败 ,会立即向前端开发回到400,而且错误报告也会附加回到。

4、对于繁杂json格式数据信息

单纯性的应用wtforms库没法完成繁杂json格式数据信息的解决,因此在我的探寻下 ,发觉还有一个wtforms的拓展库,叫wtforms-json,根据这一库能够完成。

因此拓展原来的BaseForm ,应用wtforms-json ,模仿原来基类,我完成的新基类以下 。

import wtforms_json

class JsonForm(Form):

    @classmethod
    def init_and_validate(cls):
        wtforms_json.init()
        form = cls.from_json(request.get_json())
        valid = form.validate()
        if not valid:
            raise ParameterException(msg=form.errors)
        return form

承继所述新的基类,那样的Form就可以完成随意json格式的数据信息的校验了 。

应用举例说明

对于一个要求 ,要求体假如为

{
    "username": "xiaochen",
    "age": 1,
    "address_list": [
        "beijing",
        "shanghai"
    ],
    "info": {
        "name": "hi",
        "length": 5
    },
    "area_list": [
        {
            "level1": "北京市",
            "level2": "朝阳区"
        },
        {
            "level1": "北京市",
            "level2": "海淀区"
        }
    ]
}

根据以下Form就可以完成校验

class InfoForm(JsonForm):
    name = StringField()
    length = IntegerField()

class AreaForm(JsonForm):
    level1 = StringField()
    levle2 = StringField()

class DemoForm(JsonForm):
    username = StringField()
    age = IntegerField()
    address_list = FieldList(
        StringField(),
        min_entries=1
    )
    info = FormField(InfoForm)
    area_list = FieldList(
        FormField(AreaForm),
        min_entries=1
    )


form = DemoForm().init_and_validate()

这般就可以完成繁杂json数据信息的校验

有关flask的参数校验,之上是我现阶段把握的一些技巧,若有不正确热烈欢迎强调。


博客园: https://www.cnblogs.com/luyuze95/

GitHub: https://github.com/luyuze95

文章来源于网络 ,如有侵权请联系站长QQ61910465删除
本文版权归趣KUAI排www.SEOguruBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ→61910465