怎么解决没有用django返回httpresonse错误?

时间:2018-03-27 09:29:54

标签: python django django-forms django-views

我在注册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行

4 个答案:

答案 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)**