【问题标题】:views.log_in didn't return an HttpResponse objectviews.log_in 没有返回 HttpResponse 对象
【发布时间】:2014-12-01 20:32:12
【问题描述】:

每当用户输入空白密码(或用户名)并登录时,都会显示此错误:

ValueError at /
The view views.log_in didn't return an HttpResponse object.

代码:

def log_in(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            user = form.cleaned_data['username']
            pword = form.cleaned_data['password']
            user = authenticate(username=user, password=pword)
            if user is not None:
                login(request, user)
                if request.GET.get('next') is not None:
                    return HttpResponseRedirect(request.GET.get('next'))
                else:
                    return HttpResponseRedirect('/home/')
            else:
                return render(request, 'login.html', { 'logform': form, 'error': True})
    else:
        if request.user.is_authenticated():
            return HttpResponseRedirect('/home/')
        else:
            form = LoginForm()
            return render(request, 'login.html', { 'logform': form, })

我该如何解决这个错误?谢谢。

【问题讨论】:

    标签: django python-3.x


    【解决方案1】:

    当表单无效时,您没有返回值。通常的选择是取消缩进 return render(... 行,以便在没有触发任何重定向时执行,从而呈现带有错误的无效表单:

    def log_in(request):
        if request.method == 'POST':
            # as above
        else:
            if request.user.is_authenticated():
                return HttpResponseRedirect('/home/')
            else:
                form = LoginForm()
        return render(request, 'login.html', { 'logform': form, })
    

    【讨论】:

    • 我是这样做的,如果没有输入密码或用户名,它不会显示错误。但是,如果我输入错误的用户名和密码,则会显示错误。
    • 您是在检查表单的错误,还是在寻找您在用户名/密码未通过身份验证时放入上下文中的 'error'=True 值?如果您正在查看该变量以显示错误,您也可以在表单无效时设置该值,或者您可以让您的模板检查form.is_bound and not form.is_valid
    • 我找不到模板检查 form.is_bound 而不是 form.is_valid 的示例。请指导我?
    • 大概你的模板中有{% if error %}之类的东西。您可以将其更改为 {% if error or logform.is_bound and not logform.is_valid %},至少如果您使用的是最新版本的 Django。
    猜你喜欢
    • 2012-09-12
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2011-03-06
    相关资源
    最近更新 更多