我刚开始对我的一个项目使用Pyramid,并且我需要通过获取表单字段值并进行Web服务调用以确认值的正确性,以验证表单域输入。例如,有一个字段叫做你的银行的CUSTOMER-ID。我需要将(单独)作为输入,并通过发出Web服务调用(如http://someotherdomain/validate_customer_id/?customer_id=<input_value>
)让服务器级别进行验证。哪一个是表单验证的正确方法? Colander的Schema验证或Deform的表单验证?
我对表单模式管理使用Colander,对于所有表单验证逻辑使用Deform。我很困惑我需要在CUSTOMER-ID情况下放置我的验证逻辑。是否在MySchema().bind(customer_id=<input_value>)
(它有一个延迟验证器查询Web服务)或者form.validate(request.POST.items())?如果我采用延迟验证程序的路径,则MySchema().bind
对于错误的CUSTOMER-ID正在引发colander.Invalid
错误。没关系。但是这个错误并不在表单层面,而是在模式层面。那么我怎么会以一种理智的方式告诉用户这件事?
我对Django窗体有很好的使用经验,所以我期待着像clean
这样的方法。像表单['customer_id']。错误是我期望在模板级别。金字塔的Deform或Colander可能吗?
谢谢。现在很清楚。但是,如果模式验证失败,我将如何报告这种错误?就像告诉用户“输入无效的CUSTOMER_ID”一样?因为它们处于两个不同的层次。 –
这是一个非常好的答案。 +1 –
@漏洞在生态系统中,您想要更改的消息在验证器级别定义,即https://github.com/Pylons/colander/blob/master/colander/__init__.py#L314。当你实例化他们时,他们中的一些人接受“消息”kwarg,有些则不。 – JayD3e