【问题标题】:json.dump throwing “TypeError: {…} is not JSON serializable” on wtf form validation errorsjson.dump 在 wtf 表单验证错误中抛出“TypeError: {…} is not JSON serializable”
【发布时间】:2016-06-14 23:46:22
【问题描述】:

我想通过烧瓶中的 Ajax 发布请求处理 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 行,默认提升
TypeError(repr(o) + "不是 JSON 可序列化")
类型错误:l'需要用户名或电子邮件地址。'不是 JSON 可序列化的

在 json.dumps 中使用之前需要对 form.errors 做一些处理吗?

form.error 的输出
{'iserror': True, 'password': [l'A Password is required.'], 'csrf_token': ['CSRF token missing'], 'username': [l'A Username or E-Mail Address is required .']}

【问题讨论】:

  • 出于好奇,form.errors 字符串是什么样的——也许是个愚蠢的问题,但你确定它是 json 吗?你能把上面的字符串贴出来吗?谢谢。
  • 在密码和用户名的错误消息前似乎“L”是问题所在。我想这需要一些处理。
  • 感谢您指出问题。问题出在我的验证消息中。我已经回答了问题

标签: python json flask


【解决方案1】:

问题是我的验证信息。不知道为什么我在消息之前有 _ 并且这是导致问题的原因。

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

将表单验证更改为

后工作正常
password = PasswordField(("Password"), validators=[
          DataRequired(message=("A Password is required."))])

【讨论】:

  • 下划线是处理translationgettext 函数的最常见别名。函数的返回值不是json库知道如何序列化的对象。您可以使用str() 强制将消息变为字符串,然后它就可以正常工作了。
猜你喜欢
  • 2012-06-08
  • 2012-02-16
  • 1970-01-01
  • 2013-11-25
  • 2019-05-06
  • 2019-10-09
  • 2021-03-02
  • 1970-01-01
  • 2012-08-10
相关资源
最近更新 更多