Python如何复用字典条目避免重复编写接口响应配置?
你可以通过以下几种Python原生语法实现配置复用,无需额外依赖:
方法1:元组 + dict() 构造
先提前定义好各个通用响应的(状态码, 响应配置)元组:
# 预定义通用响应条目 RESP_401 = (status.HTTP_401_UNAUTHORIZED, {"model": UnauthorizedDetail, "description": "Unauthorized"}) RESP_402 = (status.HTTP_402_PAYMENT_REQUIRED, {"model": PaymentRequiredDetail, "description": "Payment Required"}) RESP_403 = (status.HTTP_403_FORBIDDEN, {"model": ForbiddenDetail, "description": "Forbidden"})
使用时直接把需要的元组传给dict()即可,写法和你期望的格式非常接近:
# 仅需401的场景 responses = dict([RESP_401]) # 需要同时添加401、402、403的场景 responses = dict([RESP_401, RESP_402, RESP_403])
方法2:字典解包语法
你也可以把单个响应定义为单键字典,用**解包合并:
# 预定义单键响应字典 RESP_401 = {status.HTTP_401_UNAUTHORIZED: {"model": UnauthorizedDetail, "description": "Unauthorized"}} RESP_402 = {status.HTTP_402_PAYMENT_REQUIRED: {"model": PaymentRequiredDetail, "description": "Payment Required"}}
使用时直接在字典内解包即可,还支持同时添加自定义的特殊响应:
responses = { **RESP_401, **RESP_402, 404: {"model": NotFoundDetail, "description": "Not Found"} }
方法3:Python 3.9+ 字典合并运算符
如果你使用Python 3.9及以上版本,可以用更简洁的|合并运算符:
# 按需合并响应 responses = RESP_401 | RESP_402 | RESP_403 # 支持追加自定义响应 responses = RESP_401 | RESP_402 | {404: {"model": NotFoundDetail, "description": "Not Found"}}
你示例中responses={the401obj, the402obj}的写法是集合的初始化语法,而responses参数要求传入字典类型,因此无法直接使用,上述方案的写法已经和你期望的语法高度接近,完全可以实现一次定义、多处复用的需求。
内容的提问来源于stack exchange,提问作者SledgeHammer
相关产品推荐
相关产品推荐

