如何在基于类的视图Django中对会话进行身份验证

时间:2020-09-26 06:17:19

标签: python python-3.x django django-models django-forms

我是Django新手

我正在尝试将基于函数的视图转换为基于类的视图。在这里,我遇到了一个问题。

我不知道用户是否已登录。我无法在基于类的视图中调用user.is_authenticated。

我的代码:

class UserLoginView(FormView):
    template_name = 'login.html'
    form_class = UserLoginForm
    success_url = reverse_lazy('login')

    def form_valid(self, form):
        user = authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password'])
        if user is not None:
            login(request=self.request, user=user)
            print('Login Successfull')
            return HttpResponseRedirect(self.success_url)

    def form_invalid(self, form):
        print('Login Failed')
        return HttpResponseRedirect(self.success_url)

如何检查用户是否已经登录并将其直接发送到首页。

谢谢。

1 个答案:

答案 0 :(得分:0)

根据您的要求,您希望在基于类的视图中登录后对用户进行身份验证并将其发送到主页。

这是我们可以做的。我们可以在基于类的主页视图中使用LoginRequiredMixin,以帮助我们检查用户是否已登录。如果用户未登录,他们将被重定向到我们指定的登录页面。否则,请正常执行视图,用户将可以自由访问主页。

示例:

views.py

from django.contrib.auth.mixins import LoginRequiredMixin

class HomeView(LoginRequiredMixin):  # Add the LoginRequiredMixin 
    template_name = 'index.html'
    login_url = '/login/'  # Replace '/login/' with your login URL, an un-logged-in user will be redirect to this URL

使用LoginRequiredMixin时必须关心的是订购。

如果基于类的视图继承了多个类,则通常将LoginRequiredMixin放在继承的第一位置。因为它可以确保用户在视图对该用户进行任何进一步操作之前已登录。

class HomeView(LoginRequiredMixin, ClassA, ClassB):
    pass

您可以在此page

中获取有关LoginRequiredMixin的更多信息