簡體   English   中英

在架構上使用@validate后,數據丟失

[英]Data is missing after using @validate with Schema

我正在驗證使用Turbogears 2.3.3和formencode 1.3的Web應用程序

我想驗證用戶通過表單創建過程創建的動態表單。 我正在使用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)

謝謝您的幫助

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM