我刚刚开始使用Pyramid对于我的一个项目,我有一种情况,我需要验证表单字段输入,方法是获取该表单字段值并进行 Web 服务调用来断言该值的正确性。例如,有一个字段称为您银行的 CUSTOMER-ID。我需要将其(单独)作为输入,并通过进行 Web 服务调用(例如http://someotherdomain/validate_customer_id/?customer_id=<input_value>
)可以说。
我在用Colander用于表单架构管理和Deform对于所有表单验证逻辑。我对需要在哪里放置 CUSTOMER-ID 案例的验证逻辑感到困惑。是在MySchema().bind(customer_id=<input_value>)
(它有一个查询网络服务的延迟验证器)或 form.validate(request.POST.items()) 中的某些内容?如果我采用延迟验证器的路径,那么MySchema().bind
正在提高colander.Invalid
因 CUSTOMER-ID 不正确而出现错误。没关系。但该错误不是在表单级别,而是在架构级别。那么我该如何以理智的方式告诉用户这一点呢?
我对 Django 表单有很好的经验,所以我期待类似的东西clean
方法。像 form['customer_id'].error 这样的表单错误是我在模板级别所期望的。是否可以使用 Pyramid's Deform 或漏勺?
所以我认为你遇到的最大问题是理解滤锅和变形的关注点分离。人们喜欢将 Colander 称为通用模式验证库。这意味着我们定义一个模式,其中每个节点都有特定的数据类型,并且某些节点可能是必需的/可选的。然后,漏勺能够验证该模式,并告诉我们传递给漏勺的数据是否符合该模式。举个例子,在我的网络应用程序中,我经常构建接受需要验证的 GET/POST 参数的 api。所以在金字塔中,假设我有这样的场景:
request.POST = {
'post_id': 1,
'author_id': 1,
'unnecessary_attr': 'stuff'
}
然后我可以像这样验证它:
# schema
schema = SchemaNode(Mapping(),
SchemaNode(Integer(), name='post_id'),
SchemaNode(Integer(), name='author_id'))
schema.deserialize(request.POST)
如果数据不能符合指定的模式,则会出错。所以你可以看到,漏勺实际上可以用来验证任何数据集,无论是来自 POST/GET/JSON 数据。另一方面,变形是一个表单库,可以帮助您创建/验证表单。它使用漏勺来满足所有验证需求,如你看到的它几乎完全将验证委托给漏勺。因此,为了回答您的问题,您将在漏勺中完成所有验证工作,而变形将主要处理表单的渲染。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)