如何在Django中使用form.errors.as_json()进行JSON解析返回JsonResponse(data)

时间:2018-03-06 06:47:20

标签: json django parsing

在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中循环并获取所有“message”键,这样我就可以用它在ajax调用之后通知用户。

由于

2 个答案:

答案 0 :(得分:0)

无论如何,我刚刚解决了我的问题而只想分享我的所作所为。

<强> 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 +

由于 MinedBP

答案 1 :(得分:0)

正确的答案应该是:

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一样。