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
相关产品推荐
相关产品推荐

