webargs 的字典与棉花糖数据类模式

问题描述

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

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

解决方法

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

有时,人们认为架构对于一两个查询参数来说代码太多,而一个 dict 就足够了。

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...