使用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表单错误的主要内容,如果未能解决你的问题,请参考以下文章