Validation 涡轮齿轮2.3@有效分两步
我正在使用TurboGears 2.3,正在使用formencode验证表单,需要一些指导 我有一个表格,涵盖了两个不同的对象。它们几乎是一样的,但有些不同 当我提交表格时,我想验证两件事Validation 涡轮齿轮2.3@有效分两步,validation,turbogears2,formencode,Validation,Turbogears2,Formencode,我正在使用TurboGears 2.3,正在使用formencode验证表单,需要一些指导 我有一个表格,涵盖了两个不同的对象。它们几乎是一样的,但有些不同 当我提交表格时,我想验证两件事 一些基本数据 特定对象的某些特定数据 以下是我的模式: class basicQuestionSchema(Schema): questionType = validators.OneOf(['selectQuestion', 'yesNoQuestion', 'amountQuestion'])
class basicQuestionSchema(Schema):
questionType = validators.OneOf(['selectQuestion', 'yesNoQuestion', 'amountQuestion'])
allow_extra_fields = True
class amount_or_yes_no_question_Schema(Schema):
questionText = validators.NotEmpty()
product_id_radio = object_exist_by_id(entity=Product, not_empty=True)
allow_extra_fields = True
class selectQuestionSchema(Schema):
questionText = validators.NotEmpty()
product_ids = validators.NotEmpty()
allow_extra_fields = True
以下是我的控制器的方法:
@expose()
@validate(validators=basicQuestionSchema(), error_handler=questionEditError)
def saveQuestion(self,**kw):
type = kw['questionType']
if type == 'selectQuestion':
self.save_select_question(**kw)
else:
self.save_amount_or_yes_no_question(**kw)
@validate(validators=selectQuestionSchema(),error_handler=questionEditError)
def save_select_question(self,**kw):
...
Do stuff
...
@validate(validators=amount_or_yes_no_question_Schema(),error_handler=questionEditError)
def save_amount_or_yes_no_question(self,**kw):
...
Do other stuff
...
我想做的是用不同的模式验证两次。这不起作用,因为只有第一个@validate被验证,而另一个没有(可能被忽略)
那么,我做错了什么
感谢您的帮助
@validate
是请求流的一部分,因此当手动调用控制器时,它不会被执行(它不是标准的python装饰器,所有TG2装饰器实际上只使用tg.hooks
注册一个钩子,因此它们被绑定到请求流)
您试图实现的目标应该在验证阶段完成,然后您可以在验证后调用保存\选择\问题
和保存\金额\或\是\否\问题
,作为普通对象方法
有关条件验证的工作示例,请参见