【问题标题】:How to JSON parse using form.errors.as_json() in Django return JsonResponse(data)如何在 Django 中使用 form.errors.as_json() 解析 JSON 返回 JsonResponse(data)
【发布时间】:2018-03-06 06:47:20
【问题描述】:

在 Django 中,我尝试使用 form.errors.as_json() 来获取所有表单错误,这里是示例 json 数据字符串。

{"password2":[{"message": "This password is too short. It must 
contain at least 8 characters.","code":"password_too_short"}]}

我想循环并在 json 中的“消息”键下获取所有内容,以便在 ajax 调用后使用它来通知用户。

谢谢

【问题讨论】:

  • 尝试使用dumps

标签: json django parsing


【解决方案1】:

无论如何,我刚刚解决了我的问题,只是想分享我所做的。

views.py

if form.is_valid():
    ...
else:
    # Extract form.errors
    errMsg= None
    errMsg = [(k, v[0]) for k, v in form.errors.items()]

return JsonResponse(errMsg)

Ajax 事件

$.ajax({
            method: "POST",
            url: '\your_url_here',
            data: $form.serialize(),
            cache: false,
            dataType: "json",
            beforeSend: function(){
                //Start displaying button's working animation
                //Do some button or loading animation here...
                }
            },
            success: function(jResults)
            {
                //This line is to remove field name display
                var strErr = jResults + '';  //make json object as string
                strErr = strErr.split(",").pop();
                alert(strErr);
            }
        });

希望这对那些面临类似问题的人有所帮助。顺便说一句,我正在使用 Django 2.0 和 Python 3.6+

谢谢 挖矿BP

【讨论】:

  • 正是我一直在寻找的东西。这创造了奇迹!赞一个!
【解决方案2】:

正确答案应该是:

return HttpReponse(form.errors.as_json(), status=400).

在 AJAX 调用中,您可以获取内容:

`$.post("{% url 'your_url'%}", your_payload).done(function(data) {
     do_something();        
 }).fail(function(xhr){
     // Here you can get the form's errors and iterate over them.
     xhr.responseText();            
 });`

您正在发送 200 HTTP 响应,这是错误的,您应该返回 400 HTTP 响应(错误请求),就像没有 AJAX 表单的 Django 一样。

【讨论】:

猜你喜欢
  • 2017-06-14
  • 2017-02-07
  • 1970-01-01
  • 2017-01-29
  • 2014-11-22
  • 2015-04-11
  • 2018-10-06
  • 2021-03-19
  • 2017-12-24
相关资源
最近更新 更多