Django类视图实现已注册用户条件重定向时报HttpResponse缺失错误
问题原因
你的报错核心来自两个可修复的代码问题:
- post方法未覆盖所有返回分支
当前homeview的post方法仅在表单校验通过(form.is_valid()为True)的场景下返回响应对象,当表单校验失败时,方法没有任何返回值,Django强制要求所有视图方法必须返回HttpResponse对象,否则就会抛出你遇到的报错。 - 代码缩进异常
你贴出的代码中post方法的缩进和get方法不一致,如果本地代码也是同样的缩进问题,会导致post方法不属于homeview类,请求匹配时逻辑异常。
修复后的完整代码
from django.shortcuts import render, redirect from django.views import View from Lpage.forms import SubscriberEntryForm from Lpage.models import Subscriber class homeview(View): # 统一类方法缩进 def get(self,request): msg = request.session.get('msg', False) if msg: del request.session['msg'] # 给模板传入空表单供页面渲染 return render(request,'Lpage/index.html', {'form': SubscriberEntryForm()}) def post(self, request): form = SubscriberEntryForm(request.POST or None) if form.is_valid(): obj = form.save(commit=False) qs = Subscriber.objects.filter(email__iexact=obj.email) if qs.exists(): return redirect('messageview') else: obj.save() request.session['msg'] = "msg" return redirect(request.path) # 补充表单校验失败的返回分支,带错误的表单传回模板 return render(request,'Lpage/index.html', {'form': form}) def messageview(request): return render(request,'Lpage/messages.html',{})
补充说明
你可以在index.html中通过{{ form.errors }}渲染表单校验的错误提示,方便用户排查提交失败的原因。
内容的提问来源于stack exchange,提问作者Ganesa Murthi
相关产品推荐
相关产品推荐

