【问题标题】:Dictionary vs Marshmallow dataclass schemas for webargswebargs 的字典 vs Marshmallow 数据类模式
【发布时间】:2021-03-03 08:24:15
【问题描述】:

webargs 模块允许将参数模式描述为纯字典或棉花糖数据类模式:

# Dictionary variant
@use_args({'field1': field.Int(required=True, validate=validate.Range(min=1))}, location='json')
def post(args: Dict[str, any]):
    controller.post(args)

# Marshmallow dataclass schema
@dataclass()
class Arg:
    field1: int = field(metadata=dict(required=True, validate=validate.Range(min=1)))

@use_args(Arg.Schema(), location='json')
def post(arg: Arg):
    controller.post(arg)

第一个变体看起来更短更快,但我们失去了 IDE 中的语法高亮和类型检查(因为它是 dict),而且它还导致更长的调用,即 args['field1'] 而不是 arg.field1

您在大型项目中使用哪种变体?在使用第一个或第二个变体时是否有一些最佳做法?

【问题讨论】:

    标签: python python-3.x marshmallow webargs


    【解决方案1】:

    没有最佳实践。这是一个偏好问题,真的。

    有时,人们认为一个模式对于一个或两个查询参数来说是太多的代码,一个字典就足够了。

    我喜欢到处使用模式。我发现它更加一致,它允许所有模式从基本模式派生以继承元参数。

    我不使用棉花糖数据类,只是纯棉花糖,所以无论如何我总是得到一个字典。

    【讨论】:

    • 感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2019-01-30
    • 2018-04-06
    • 2015-02-06
    • 1970-01-01
    • 2019-01-13
    相关资源
    最近更新 更多