Flask 接口参数校验器-支持多层嵌套
针对 f l a s k flask flask接口自定义一套 A P I API API请求参数校验工具
特点
- 精准校验参数,能对每一个传入的参数能进行完整的校验,并且精准定位参数位置。
- 支持多层复杂嵌套结构的参数校验。
- 校验定义简单。定义校验参数时,只需要继承 P a r a m V e r i f y ParamVerify ParamVerify校验器填入你要校验的字段即可,定义校验结构也很简单,只需和传入参数结构一致,通俗易懂。
定义 P a r a m V e r i f y ParamVerify ParamVerify为参数校验器
- P a r a m V e r i f y ParamVerify ParamVerify校验基类,接口校验需要继承它,复用率高,减少冗余代码即减少不必要的校验逻辑代码重复开发,提高代码质量。
- 核心:支持多层嵌套结构校验,原理用递归逐层获取并校验
from functools import wraps
'''
注释:参数接口校验,需继承ParamVerify,填写要校验的字段即可,在接口处使用装饰器start_verify实现参数校验
使用类继承更佳,可继承相关字段或者重写需要修改的要校验的相关字段
'''
class VerifyException(Exception):
pass
class ParamVerify:
"""
接口参数校验器
————————————
写入需要校验的字段: 字典-数据类型, verify_field, verify_type 属必填字段
校验参数字段解释:
verify_field: 校验字段名称 - 必填字段
verify_type: 校验字段类型(int, str, bool,dict,list) - 必填字段
verify_value: 对值中的结构进行校验(多层嵌套类型),为None则不需要再对值里面的结构校验
low: 最小值
high: 最大值
require: 是否必填
————————————
egg:
age = {'verify_field': 'age', 'verify_type': int, 'low': 10, 'high': 20, 'require': True,'verify_value': None}
name = {'verify_field': 'name', 'verify_type': str, 'require': True, 'verify_value': None}
"""
def __init__(self):
self.__data = None
self.__schemas = []
self.__param_field_name = []
self.__verify_columns_name = []
self.__unknown_columns_name = []
self.__get_attribute()
self.__type = {
str: 'string', bool: '布尔', int: 'int', float: 'float'}
self.__message = []
def __verify(self, verify_data, verify_schema):
"""
:param verify_data: 校验的数据
:param verify_schema: 校验的结构
:return: 错误提示
"""
verify_field = verify_schema.get('verify_field')
if not verify_field:
raise VerifyException("校验类中存在verify_field未填")
verify_type = verify_schema.get('verify_type')
if not verify_type:
raise VerifyException("校验类中存在verify_type未填")
law = verify_schema.get('law')
high = verify_schema.get('high')
verify_value