Django中POST方法处理空表单时返回200状态码的原因是什么?
问题原因分析
你的代码在处理表单验证失败的场景时,存在两个关键问题:
- 当提交空表单(或验证不通过的表单)时,
form.is_valid()返回False,此时你没有保留带有错误信息的验证失败表单,反而重新实例化了一个全新的空表单form = ContactModelForm(),并将这个空表单传给模板渲染,所以页面显示的是无错误提示的空表单;同时因为是正常渲染模板,返回状态码自然是200。 post方法里的if request.method == 'POST'判断完全多余——Django的View类中,post方法只会在请求为POST类型时被调用,这个判断没有实际意义。
修复方案
删掉重新实例化空表单的代码,直接返回验证失败的原表单即可,这样模板就能渲染出带错误提示的表单:
class ContactView(View): def get(self, request): form = ContactModelForm() return render(request, 'contact/contact_us.html', {'forms': form}) def post(self, request): form = ContactModelForm(request.POST) if form.is_valid(): form.save() return redirect('home') # 验证失败时直接返回带错误信息的form,无需重新创建空表单 return render(request, 'contact/contact_us.html', {'forms': form})
修改后,用户提交空表单时,模板会接收到带有错误信息的form对象,就能正确显示对应的验证错误提示,而非空表单。
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

