flask 接口参数校验器(支持多层嵌套参数校验)

Flask 接口参数校验器-支持多层嵌套

针对 f l a s k flask flask接口自定义一套 A P I API API请求参数校验工具

特点
  1. 精准校验参数,能对每一个传入的参数能进行完整的校验,并且精准定位参数位置。
  2. 支持多层复杂嵌套结构的参数校验。
  3. 校验定义简单。定义校验参数时,只需要继承 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为参数校验器
  1. P a r a m V e r i f y ParamVerify ParamVerify校验基类,接口校验需要继承它,复用率高,减少冗余代码即减少不必要的校验逻辑代码重复开发,提高代码质量。
  2. 核心:支持多层嵌套结构校验,原理用递归逐层获取并校验
# -*- coding: utf-8 -*-
# @Time : 2022/4/27 10:21
# @Author : 小帆芽芽
# @Desc : flask接口参数校验器
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):
        # 初始化request获得的参数
        self.__data = None
        # 初始化校验参数结构列表
        self.__schemas = []
        # 校验类的校验参数名称 egg -> ['age','name']
        self.__param_field_name = []
        # 校验的字段名称 和 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')  # 校验字段名
        # assert 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 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小帆芽芽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值