You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cerberus中校验根键:禁止特定键名

如何用Cerberus禁止特定的非法键名?

我来帮你搞定这个Cerberus的校验问题!你之前的代码问题出在对allow_unknown的赋值方式上——Cerberus不支持直接给Validator实例的allow_unknown属性赋值那个字典格式的配置,得换正确的姿势来设置。

核心思路

Cerberus控制未知字段的规则,需要在Validator初始化时传入参数,或者在校验Schema里定义,两种方式都能实现你“禁止src、alsoBad这两个键”的需求。

方案1:初始化Validator时配置禁止字段

这种方式适合全局控制所有校验的未知字段规则:

from cerberus import Validator

def check_data(type_data):
    # 初始化Validator时,直接指定禁止的未知键
    val = Validator(allow_unknown={'forbidden': ['src', 'alsoBad']})
    
    # 如果你需要校验name字段的格式(比如必须是字符串),可以定义对应的Schema
    schema = {'name': {'type': 'string'}}
    # 不需要校验name格式的话,直接传空字典{}就行
    
    is_valid = val.validate(type_data, schema)
    
    # 打印错误信息方便调试
    if not is_valid:
        print("校验失败:", val.errors)
    return is_valid

方案2:在Schema中定义禁止规则

如果只是针对某一类数据的校验需要这个规则,把allow_unknown写在Schema里更灵活:

from cerberus import Validator

def check_data(type_data):
    schema = {
        'name': {'type': 'string'},  # 可选:校验name必须是字符串
        'allow_unknown': {'forbidden': ['src', 'alsoBad']}
    }
    
    val = Validator()
    is_valid = val.validate(type_data, schema)
    
    if not is_valid:
        print("校验失败:", val.errors)
    return is_valid

测试示例

  • 非法数据(包含src):

    check_data({'name': 'test', 'src': 'who cares this is wrong'})
    

    会返回False,错误信息类似:{'src': ['field is not allowed']}

  • 合法数据(只有name):

    check_data({'name': 'valid_string'})
    

    返回True

  • 其他未知键(非禁止列表):

    check_data({'name': 'test', 'other_key': 'allowed_value'})
    

    会返回True——因为我们只禁止了src和alsoBad,其他未知键是允许的。如果需要只允许name这一个键,把allow_unknown设为False就行,这样任何未知字段(包括src、alsoBad)都会被拒绝。

内容的提问来源于stack exchange,提问作者Ray Salemi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:50:08