Turbogears 2.3.3 と formencode 1.3 を使用している webapp の検証に取り組んでいます。
ユーザーがフォーム作成プロセスを通じて作成した動的フォームを検証したいと考えています。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 は none になり、私は何かをすることができません
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)
助けてくれてありがとう