You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django表单验证失败时使用message框架展示错误信息异常问题

问题根因

你的RegistroView的post请求处理逻辑中,表单校验失败的分支仅设置了错误消息,没有返回任何响应对象,也没有将携带校验错误的表单实例回传给模板渲染,因此提交非法数据后会直接返回默认的HttpResponse错误,错误消息也无法在当前页面直接展示。

修复方案

修改视图层的post方法,在表单校验不通过时,重新渲染注册页面,并将带错误信息的表单实例传入模板:

class RegistroView(generic.View):
    def get(self,request, *args, **kwargs):
        return render(request, 'main/registro.html', {'registro_form': NovoUsuarioForm()})

    def post(self,request, *args, **kwargs):
        form = NovoUsuarioForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request,user)
            messages.success(request, "Registration successful." )
            return HttpResponseRedirect(reverse('pesquisa'))
        # 表单校验不通过时添加错误消息,返回渲染后的表单页面
        messages.error(request, "Unsuccessful registration. Invalid information.")
        return render(request, 'main/registro.html', {'registro_form': form})

补充说明

你手动退回表单页能看到错误提示的原因是:Django的message框架默认会将消息存储在用户会话中,你提交请求时已经将错误消息写入了会话,手动后退触发get请求加载页面时,模板读取到了会话中未被消费的错误消息,因此正常展示。

内容的提问来源于stack exchange,提问作者Davi Dantas Soares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:54:03