我正在努力验证我的webapp,它正在使用Turbogears 2.3.3和formencode 1.3
我想验证用户通过表单创建过程创建的动态表单。 我正在使用json将表单字段从客户端发送到服务器以帮助组织事物 以下是我发送数据的方式:
var dataToSend = JSON.stringify({
'num_of_copies': num_of_copies.val(),
'amountAnswers' : amountAnswers,
'yesNoAnswers' : yesNoAnswers,
'selectAnswers' : selectAnswers,
'comments':comments.val()
})
$.ajax({
type: 'POST',
url: siteProxy+'orders/saveOrderItem',
data: {'data':dataToSend},
dataType: "json",
success: function (data, textStatus) {
if (textStatus == "success") {
if (data.errors){
console.log(data.errors)
}
}
},
error: function (data, textStatus) {
alert('error');
}
})
在服务器上我想验证数据,然后做一些事情
@expose('json')
@validate(validators=orderItemSchema(),error_handler=simpleErrorHandler)
def saveOrderItem(self,**kw):
answers = json.loads(kw['data'])
...... do stuff ...
没有验证,我的代码就可以工作。
这是我的验证架构:
class orderItemSchema(Schema):
def _convert_to_python(self, value_dict, state):
value_dict = json.loads(value_dict['data'])
super(orderItemSchema,self)._convert_to_python(value_dict, state)
num_of_copies = validators.Number(min=1)
comments = validators.UnicodeString()
amountAnswers = ForEach(AmountAnswerValidator())
yesNoAnswers = ForEach(YesNoAnswerValidator())
selectAnswers = ForEach(SelectAnswerValidator())
验证效果很好。
我的问题是:验证后,kw变为无,我无法做到的事情
def saveOrderItem(self,**kw):
我认为问题出在代码的这一部分:
class orderItemSchema(Schema):
def _convert_to_python(self, value_dict, state):
value_dict = json.loads(value_dict['data'])
super(orderItemSchema,self)._convert_to_python(value_dict, state)
感谢您的帮助
答案 0 :(得分:1)
可能orderItemSchema._convert_to_python
缺少返回值。应为return super(orderItemSchema,self)._convert_to_python(value_dict, state)
,否则您将返回None
作为转换后的值。
如果您使用的是最近的tg版本,我建议您查看@decode_params
装饰器(http://turbogears.readthedocs.org/en/latest/reference/classes.html#tg.decorators.decode_params),它将从json主体中提取控制器参数,并让验证像往常一样流动。它将避免代码中的两个json.load
。