【问题标题】:Using and further parsing of form.errors.as_json to return http response in Django在 Django 中使用并进一步解析 form.errors.as_json 以返回 http 响应
【发布时间】:2017-06-14 03:44:50
【问题描述】:

我对 JSON 和 Django 表单都比较陌生。而且我想知道如何使用 Djagno 的 user_form.errors.as_json() 将错误消息传输到 client-slde。现在,我有以下代码:

在服务器端。我有:

if form.is_valid():
    # some code
else:
    return JsonResponse(user_form.errors.as_json(), status = 400, safe = False)

客户:

$.post('/url/', data, function(response){
        // Success   
    }).fail(function(response){ 
        var errors = $.parseJSON($.parseJSON(response.responseText)); // looks stupid

akward 行 $.parseJSON($.parseJSON(response.responseText)); 证明我做错了什么。任何人都可以提供发送和解析 jsonified 表单错误的最佳实践代码模式吗?

【问题讨论】:

    标签: json ajax django


    【解决方案1】:

    问题是您要转换为 JSON 两次 - 一次是在您调用 as_json 时,另一次是在您使用 JsonResponse 时。

    您可以将HttpResponseform.errors.as_json() 一起使用:

    return HttpResponse(user_form.errors.as_json(), status = 400, content_type='application/json')
    

    注意as_json 文档中关于转义结果以避免跨站点脚本攻击的警告。如果你也使用JsonResponse,你应该确保结果被转义。

    【讨论】:

    • 我收到SyntaxError: non-keyword arg after keyword arg。如果我删除'application/json',没关系。你是不是印错了什么?)
    • 应该是content_type='application/json'
    • 太棒了!有点跑题了,你认为无效表单返回 400 状态可以吗?还是我应该返回 200 或 500?
    • 我同意这是题外话。你绝对不应该返回500 - 没有服务器错误。返回400 可以轻松区分有效和无效表单,并允许您在JavaScript 中使用.fail()
    • 这两种“替代品”实际上给出了不同的结果。例如,后者不包含错误代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2016-09-12
    • 1970-01-01
    • 2018-04-11
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多