2016-06-14 40 views
-1

我想通過Ajax post請求處理wtf窗體。json.dump拋出「TypeError:{...}不是JSON可序列化」對wtf表單驗證錯誤

form = LoginForm(request.form) 
if form.validate(): 
    ..... 
    .... do something 
    ..... 
form.errors['iserror'] = True 
return json.dumps(form.errors) 

但我得到這個錯誤

文件 「/usr/lib/python3.4/json/encoder.py」,線路173,在默認情況下提高
類型錯誤(再版(O)+「不是JSON序列化「)
TypeError:l'A用戶名或電子郵件地址是必需的。'是不是JSON序列化

在使用json.dumps之前,我是否需要在form.errors上做一些處理?

輸出form.error的
{ 'ISERROR':真, '密碼':[L'需要密碼。 '], 'csrf_token':[' CSRF令牌丟失'], '用戶名':[ ']}

+1

出於好奇後有,什麼是form.errors串看起來像 - 也許一個愚蠢的問題,但你確定它是JSON?你可以發佈上面的字符串嗎?謝謝。 – picus

+0

在密碼和用戶名的錯誤消息前面似乎是「L」是問題。我想這需要一些處理。 – jas

+0

感謝您指出問題。問題出在我的驗證信息中。我已經回答了 – jas

回答

0

問題是我的確認信息。不知道爲什麼我在消息之前有_這是造成問題的原因。

password = PasswordField(_("Password"), validators=[ 
      DataRequired(message=_("A Password is required."))]) 

做工精細改變表單驗證,以

password = PasswordField(("Password"), validators=[ 
      DataRequired(message=("A Password is required."))]) 
+1

這個問題下劃線是'gettext'函數最常見的別名,它的句柄[translation](https://docs.djangoproject.com/en/1.9/topics/i18n/translation/)。函數的返回值不是json庫知道如何序列化的對象。你可以用'str()'強制消息變成一個字符串,然後它就可以正常工作。 – Anonymous

相關問題