返回纯django在JSON中形成错误
-
13-09-2019 - |
题
我有一个django表格,我在普通的django视图中验证。我试图弄清楚如何提取纯错误(没有HTML格式)。以下是我目前正在使用的代码。
return json_response({ 'success' : False,
'errors' : form.errors })
这样,我从Django那里得到了臭名昭著的代理对象错误。将每个错误施加到Unicode中也不会这样做,因为每个错误 __unicode__
方法将有效地称为HTML尺寸。
有任何想法吗?
编辑:
对于感兴趣的人,这是 json_response
:
def json_response(x):
import json
return HttpResponse(json.dumps(x, sort_keys=True, indent=2),
content_type='application/json; charset=UTF-8')
解决方案 2
在 很多 四处乱逛,测试不同的事情。 NB我不确定这是否也可以与国际化一起使用。这也对每个字段都遇到了第一个验证错误,但是对其进行修改以获取所有错误应该很容易。
return json_response({ 'success' : False,
'errors' : [(k, v[0].__unicode__()) for k, v in form.errors.items()] })
其他提示
这似乎有所改善。 Django 1.3中的以下作品:
return json_response({
'success': False,
'errors': dict(form.errors.items()),
})
无需 __unicode__
或懒惰翻译。这也给每个字段提供了全部错误。
用于Django 1.7+使用 form.errors.as_json() 或类似的东西:
errors = {f: e.get_json_data() for f, e in form.errors.items()}
return json_response(success=False, data=errors)
这里的问题是错误消息是懒惰的翻译对象。这 文档 请提一下:
只需确保您有Sune_ascii = false并使用leazyencoder即可。
我们做得到:
import simplejson as json
errors = json.dumps(form.errors)
return HttpResponse(errors, mimetype='application/json')
json.dumps
无法序列化Django的代理函数(例如懒惰翻译)。
作为 记录 您应该创建一个新的编码器类:
import json
from django.utils.functional import Promise
from django.utils.encoding import force_text
from django.core.serializers.json import DjangoJSONEncoder
class LazyEncoder(DjangoJSONEncoder):
def default(self, obj):
if isinstance(obj, Promise):
return force_text(obj)
return super(LazyEncoder, self).default(obj)
使用这样的新编码器:
json.dumps(s, cls=LazyEncoder)
就这样 :)
不隶属于 StackOverflow