Как аутентифицировать сеанс внутри представления на основе классов django

#python #python-3.x #django #django-models #django-forms

#python #python-3.x #джанго #django-модели #django-формы

Вопрос:

Я новичок в 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:

В качестве вашего требования вы хотите аутентифицировать пользователя и отправить его на домашнюю страницу после входа в систему в представлении на основе классов.

Вот что мы можем сделать. Мы можем использовать 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
  

Вы можете получить более подробную информацию о LoginRequiredMixin на этой странице