使用ajax将它们作为json后如何循环遍历django表单错误

Posted

技术标签:

【中文标题】使用ajax将它们作为json后如何循环遍历django表单错误【英文标题】:how to loop through django form errors after getting them as json with ajax 【发布时间】:2021-02-15 06:23:38 【问题描述】:

当没有错误并正确保存用户时,我的注册表单可以正常工作,但是在使用form.errors.as_json 获取表单字段错误后,我无法显示错误

这是表单的视图:

   if request.is_ajax():
       signup_form = SignupForm(request.POST)
       if signup_form.is_valid():
           signup_form.save()
           full_name = signup_form.cleaned_data.get('full_name')
           email = signup_form.cleaned_data.get('email')
           raw_password = signup_form.cleaned_data.get('password1')
           account = authenticate(email=email, password=raw_password)
           login(request, account)
           return JsonResponse("success" : True, status=200)
       else:
           return JsonResponse('success': False,signup_form.errors.as_json() , status=400)

这是我的 javascript 文件中的 ajax 内容:


 var $signupForm = $('#form-signup');
 $signupForm.submit(function (event) 
   event.preventDefault();
   var $signupData = $signupForm.serialize();
       $.ajax(
         url: "http://localhost:8000",
         method: 'POST',
         data: $signupData,
         success: function() 
           location.reload()
         ,
         error: function () 
            // display form errors in a div or console.log them
            // by looping through them
       ,
       );
     );

当出现“密码太短”或类似i get error status code 500 之类的字段输入错误时,使用此代码 和:

'str' 对象不可调用

在我的 django 服务器终端中

我检查了很多关于这个的问题,但没有一个有帮助,而且大多数都已经过时了

【问题讨论】:

【参考方案1】:
def sample(request):
    form = SampleForm(request.POST)
    if form.is_valid():
        return JsonResponse(
            'message': 'success'
        )
    
    return JsonResponse(
        'errors':form.errors,
        'message': 'invalid',    
    ,
    status=422
    )

【讨论】:

你能解释更多吗?因为你做了回答而不是评论! 你的错误如下, 'message': 'success' + 'error': '422' 您只能使用 signup_form.errors.as_json() 作为响应。或者 'message': 'validationerror', 'error': dict(signup_form.errors.as_json()) 好的,我会尝试应用您所说的内容,但为了更好地理解,请将您想说的内容正确地写在上面的答案中 docs.djangoproject.com/en/3.1/ref/request-response/… 。第二个参数不是 json 类型。它是一个编码器。【参考方案2】:

您遇到了问题,请在响应中连接问题。

【讨论】:

你能解释更多吗?因为你做了回答而不是评论! ,我没听懂你想说什么!【参考方案3】:

我认为这是一个身份验证问题。

验证后尝试打印。

如果不尝试在视图内打印signup_form.errors.as_json()

【讨论】:

你是什么意思尝试在身份验证后打印?,我试图在视图中打印错误,它在终端中成功打印,我的问题是如何循环遍历 javascript 中的这些错误显示它们 但是您收到错误状态代码 500,这意味着一些内部服务器错误。所以我认为视图内部存在问题。如果你想在 ajax 中进行迭代,请尝试 for(let error of data)console.log(error) 好的,我会尝试,顺便说一句,当我尝试打印 form.errors.as_json() 时,它们会正确打印,当我从 jsonresponse 中删除 signup_form.errors.as_json() 时,错误就会消失 在响应连接 dict 时要小心。

以上是关于使用ajax将它们作为json后如何循环遍历django表单错误的主要内容,如果未能解决你的问题,请参考以下文章

ajax 获取数据之后如何遍历到表格中?

急! jquery $.each 嵌套循环遍历

迭代JSON给出字符,而不是元素

PHP 循环遍历嵌套的 JSON 响应并重新组装为 Webhook 的简单查询字符串

循环遍历 JSON 数据并动态显示它们

使用 SwiftyJSON 循环遍历 JSON