ValueError:视图Account.views.Login没有返回HttpResponse对象。它返回了None

时间:2019-01-18 14:05:47

标签: django login

任何人都知道为什么我的代码不能从“如果用户不是None:”行开始运行?

回溯

1

2

内部服务器错误:/ login / 追溯(最近一次通话):   内部文件“ C:\ Users \ hanya \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ core \ handlers \ exception.py”,第34行     响应= get_response(请求)   文件“ C:\ Users \ hanya \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ core \ handlers \ base.py”,行137,在_get_response中     “改为不返回。” %(回调。模块,view_name) ValueError:视图Account.views.Login没有返回HttpResponse对象。它返回None。 [18 / Jan / 2019 21:59:25]“ POST / login / HTTP / 1.1” 500 56866

views.py

class Login(View):
    form_class = AccountForm
    template = 'login.html'

    def get(self, request):
        form=self.form_class(None)
        return render(request, self.template, {'form':form})

    def post (self, request):
        if request.method=="POST":
            form = self.form_class(request.POST)
            if form.is_valid():
                print('1')
                username = form.cleaned_data.get("username")
                password = form.cleaned_data.get("password")
                print('2')
                user = authenticate(username=username, password=password)
                if user is not None:
                    print('3')
                    if user.is_active:
                        login(request, user)
                        return redirect('home.html')
                    else:
                        return HttpResponse("Inactive user.")
            else:
                return render(request, 'login.html')

urls.py

urlpatterns = [
    ...
    path('emailverification/passwordchange/',  views.PasswordChange, name='passwordchange'),
]

模板

{%extends 'base_form.html'%}

{%block content%}
<div class=container-fluid>
  <form method="POST">
    {%csrf_token%}
    <label for="username">username</label>
      <input type="text" placeholder="username" name="login" required><br>
    <label for="password">password</label>
      <input type="password" placeholder="password" name="login" required><br>
    <button type="submit" class="btn btn-success">Submit</button>
  </form>


  <div class="container signin">
    <p>Do not have an account? <a href="{% url 'registration'%}">register here</a>.</p>
    <p>Forgot password?<a href="{%url 'passwordreset'%}">retrieve password</a></p>
    <p>Improve your password security.<a href="{%url 'passwordchange'%}">change password</a></p>
  </div>
<div>
{%endblock content%}

2 个答案:

答案 0 :(得分:0)

您将模板名称“ home.html”传递给了重定向功能。您应该改为传递URL。除了url,您还可以使用其他一些参数选项。

答案 1 :(得分:0)

添加了代码

def clean(self, *args, **kwargs):
    username=self.cleaned_data.get("username")
    password=self.cleaned_data.get("password")
    user=authenticate(username=username, password=password)
    if not user:
        raise forms.ValidationError("This user does not exist")
    if not user.check_password(password):
        raise forms.ValidationError("Incorrect Password")
    if not user.is_active:
        raise forms.ValidationError("This user is no longer active.")
    return super(LoginForm, self).clean(*args, **kwargs)