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