python后端接口参数校验函数

本文介绍了一个用于在编写视图时进行接口参数检查的函数,其目的是避免意外错误,规范接口校验,减少冗余代码,提升开发效率。函数支持必传和非必传参数的校验,并提供了不同的判定策略。虽然可能增加少量时间复杂度,但能提升代码质量和可维护性,适用于FastAPI和Django框架。
摘要由CSDN通过智能技术生成

1、干嘛用的

用于编写视图时的接口参数检查

2、为什么需要它

避免接口发生意料之外的报错

它有什么优点

1、规范接口校验

2、减少冗余代码的产生

3、加速开发效率

4、简洁优雅

3、源代码

def verify(fields: list[str], obj, key_fields: list[str] = None, genres=None, is_in=True):

    if key_fields:
        if len(fields) < len(key_fields):
            raise ValueError('需满足:fields长度 >= key_fields长度')
    else:
        key_fields = fields

    def decide(value):
        if is_in:
            # 如果是软判定
            return value or value is False
        return True

    _dict = {
        key_fields[i] if i < len(key_fields) else field: value
        for i, field in enumerate(fields) if decide(value := obj.get(field))
    }
    print('请求传入的数据', _dict)

return _dict


def in_verify(fields, obj, key_fields=None, is_dict=False):
    """
    软判定
    需满足:fields长度 >= key_fields长度
    传入的数据value为 0、None、''、[]、{}、()时,该方法视为请求未传参(数据会被忽略)
    """
    _dict = verify(fields, obj, key_fields)

    return _dict if is_dict else Q(**_dict)
    
def get_verify(fields, obj, key_fields=None, is_q=False, to_dict=True):
    """
    强制判定,有提示
    传入的数据value为 0、None、''、[]、{}、false时,数据依然保留,不会被忽略
    """
    if miss_field := set(fields) - set(obj.keys()):
        return f'缺少{miss_field}参数'

    if to_dict:
        _dict = verify(fields, obj, key_fields, is_in=False)
        return Q(**_dict) if is_q else _dict

4、实际使用

1、必传参数校验

必传参数校验

2、非必传参数校验

非必传参数校验

3、 进阶使用

1、修改参数key值
修改参数key值
2、校验模板类的所有参数
在这里插入图片描述

在这里插入图片描述

5、后话

使用本函数可能会耗损少量的时间复杂度。
只能适用于一部分的参数校验。
关于类型校验部分还未处理。
但是嘛,还是用的爽,能减少很多重复的代码,提升代码的可观性、可维护性。
另外函数适用于fastapi 与 django
主要区别只是获取model的field名称函数不一样
fastapt的是
在这里插入图片描述
django的是(这里_meta.fields是字段的对象列表)
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值