如何在验证通过时返回Patch字典?规避HTTP 403错误
Patch操作的验证与合法返回逻辑
需要对记录执行Patch操作时,必须先完成两项验证,否则会触发HTTP 403错误;验证通过后返回原Patch字典。
验证条件
- 构造键:
equip_+patch_dict['equip_id']的值,该键必须存在于verify_dict的键集合中 - 上述键在
verify_dict中对应的取值,必须属于valid_str列表
示例代码
valid_str = ['Not', 'Unique'] patch1_dict = {'id': 123, 'equip_id': 100} patch2_dict = {'id': 123, 'equip_id': 150} verify_dict = {'id':123, 'equip_150': 'From Template', 'equip_100': 'Unique'}
其中patch1_dict符合验证要求,patch2_dict无法通过验证。
原推导式的问题
你编写的字典推导式逻辑完全偏离验证需求:
{k:v for (k, v) in patch1_dict.items() if v in verify_dict for sub_v in valid_str}
既没有正确构造verify_dict对应的键,也没有验证值是否属于valid_str,无法得到正确结果。
正确实现方式
函数式实现(推荐)
通过函数封装验证逻辑,清晰直观,便于复用:
def validate_and_get_patch(patch_dict, verify_dict, valid_str): equip_key = f"equip_{patch_dict['equip_id']}" if equip_key in verify_dict and verify_dict[equip_key] in valid_str: return patch_dict # 验证不通过时可返回None,或根据业务需求抛出异常 return None # 测试验证 print(validate_and_get_patch(patch1_dict, verify_dict, valid_str)) # 输出: {'id': 123, 'equip_id': 100} print(validate_and_get_patch(patch2_dict, verify_dict, valid_str)) # 输出: None
字典推导式实现(按需使用)
如果必须用推导式,需先完成验证,再生成字典:
# 针对单个patch_dict的验证与推导 equip_key = f"equip_{patch1_dict['equip_id']}" valid_patch = {k: v for k, v in patch1_dict.items()} if equip_key in verify_dict and verify_dict[equip_key] in valid_str else None
内容的提问来源于stack exchange,提问作者markus1998
相关产品推荐
相关产品推荐

