首页 > 解决方案 > Django登录奇怪的行为

问题描述

我正在使用 Django 构建一个网络应用程序。我已经在主页上建立了登录和注册,因为我希望它们就在那里,但登录有问题。

如果我输入正确的凭据,它会毫无问题地让我登录,但如果我输入错误的凭据,我不会收到任何错误,它只是告诉我我的视图没有返回任何内容。

这是我的视图代码:

class MainView(View):

    def get(self, request, *args, **kwargs):
        user = request.user
        return HttpResponse(
            "Welcome " + user.username + ", You are Logged in!! you can logout <a href=/logout/>here</a>")


class HomeView(View):
    form_class_reg = SignUpForm
    form_class_login = AuthenticationForm
    template_name = 'main/home.html'

    def get(self, request, *args, **kwargs):
        if request.user.is_authenticated is True:
            return MainView.as_view()(self.request)
        if request.user.is_authenticated is False:
            form_reg = self.form_class_reg(prefix='SignUpForm')
            form_login = self.form_class_login(prefix='SignInForm')
            return render(request, self.template_name, {
                'form_reg': form_reg,
                'form_login': form_login, })

    def post(self, request, *args, **kwargs):
        form_reg = self.form_class_reg(request.POST, prefix='SignUpForm')
        form_login = self.form_class_login(data=request.POST, prefix='SignInForm')
        if form_reg.is_valid():
            form_reg.save()
            username = form_reg.cleaned_data.get('username')
            raw_password = form_reg.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('/')
        if form_login.is_valid():
            username = form_login.cleaned_data.get('username')
            raw_password = form_login.cleaned_data.get('password')
            user = authenticate(username=username, password=raw_password)
            if user is not None:
                login(request, user)
                return redirect('/')

            else:
                return HttpResponse("Wrong credentials")

因此,如果用户凭据正确,它会将我重定向到 / 这是 HomeView,然后重定向到 MainView,因为这是我稍后将构建的登录页面,但如果我输入错误的用户名/密码,它永远不会给我错误的凭据返回。

它只是给了我这个:

The view main.views.HomeView didn't return an HttpResponse object. It returned None instead.

任何的想法?

标签: pythondjango

解决方案


如果响应是None,则代码未进入条件主体,if form_reg.is_valid():并且由于else未处理案例,因此函数返回None。你应该检查form.errors一下为什么你的表单验证没有像你期望的那样工作。


推荐阅读