我在注册django时遇到问题,这是我的观看代码:
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
else:
form = RegistrationForm()
args = {'form': form}
return render(request, 'users/reg_form.html', args)
,但我总是得到:
/ user / register /上的ValueError视图Users.views.register没有 返回一个HttpResponse对象。它返回了None。请求 方法:POST请求URL:http://127.0.0.1:3001/user/register/ Django 版本:2.0.2异常类型:ValueError异常值:视图 Users.views.register没有返回HttpResponse对象。它回来了 没有。例外 位置:/home/iah/.local/lib/python3.5/site-packages/django/core/handlers/base.py 在_get_response,第139行
答案 0 :(得分:2)
检查代码并问自己如果你有POST请求会发生什么并且表单没有验证 - 你会发现在这种情况下你没有明确的返回路径,所以函数隐含地返回{{1} }。
修复很简单:取决于函数的最后两行,所以当表单不验证时,你也会返回渲染的模板:
None
答案 1 :(得分:1)
您必须从内部else
块返回响应:
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
else:
# here
...
答案 2 :(得分:0)
如果表单无效且form.is_valid()
失败,请务必返回一些内容。
示例:
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
else:
return redirect('/') # or render(...)/whatever you need to redirect to
else:
form = RegistrationForm()
args = {'form': form}
return render(request, 'users/reg_form.html', args)
希望这有帮助!
答案 3 :(得分:0)
您缺少其他代码。您的if语句说:如果表单有效,请保存表单。但是,如果表单无效,如果用户名是所有特殊字符(例如:!@#%%% ^^),或者如果用户名仅为1字符长ex :(用户名:A),该怎么办?或者如果密码只有3个字符长(例如:pas),在所有这些情况下,用户应该返回空白表格。您还应考虑使用基于类的视图进行注册此链接将help
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
**if form.is_valid():**
# What if the form is not valid you haven't accounted for that
form.save()
return redirect('/')
else:
# Adding a else solves this problem. The user gets a blank form back
form = RegistrationForm()
args = {'form': form}
return render(request, 'users/reg_form.html', args)**