torflaio-validators

Tornado, Flask, AioHttp params validators


License
BSD-3-Clause
Install
pip install torflaio-validators==1.0.1

Documentation

torflaio_validators

背景:在使用python web框架,如tornado, flask, aiohttp等框架时, 对于接口参入参数, 不同的人有不同的验证方式, 搞得项目很杂乱. 
以前用Django框架,django-rest-framework中serializers类的参数验证时,很正规,使用体验也非常好.
故参考django-rest-framework的serializers参数验证的风格开发的.用于统一tornado, flask, aiohttp等框架的参数验证方式.

版本说明:

v1.0.1: 优化项目结构。
v1.0.0: 初始版本发布。

安装:

pip install torflaio_validators

使用样例:

from torflaio_validators.base.base_validator import BaseValidator
from torflaio_validators.base.fields import IntegerField, CharField, BoolField, DictField

1.先定义要验证的参数, 每个Field均包含 field_name field_value, required, default, max_length, min_length等参数,可以根据所验证的字段是否必填,默认值等进行选择.
class PersonInfoValidator(BaseValidator):
    name = CharField()
    age = IntegerField()
    address = CharField()
    province = CharField()
    city = CharField()
    county = CharField()
    is_valid = BoolField(required=False, default=True)
    extra = DictField()
    
2.在view中引入该validator类
validator = TaskQueryValidator(data)  # data为初始验证参数
validator.validation()
validated_data = validator.validated_data   # 此处获取的validated_data就是经过验证的数据了.

3.如果不仅想要验证字段的基本信息(是否必填, 默认值,最大长度,最小长度等),还想验证业务相关的,
可以重新定义validator的valiated_data属性(property属性). 使用如下:

from torflaio_validators.base.exceptions import ParamsValidationError

class PersonInfoValidator(BaseValidator):
    name = CharField()
    age = IntegerField()
    address = CharField()
    province = CharField()
    city = CharField()
    county = CharField()
    is_valid = BoolField(required=False, default=True)
    extra = DictField()
    
    @propery
    def validated_data(self):
        validated_data = super().validated_data    # 此步骤必须, 获取上一步验证后的数据
        age = validated_data.get('age')
        if age < 18:
            raise ParamsValidationError(err_code=400, err_msg="年龄不能小于18岁")    # 此处的ParamsValidationError为该验证框架默认Error类, 也可以根据喜好自定义抛出的错误
        return validated_data

联系作者:

email: 896275756@qq.com
由于水平有限,难免有未知bug和考虑不周之处,如您有好的意见或建议,请发邮件给我,一起探讨和完善. 您的意见或建议将会体现在下一次的版本更新里。