#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 на этой странице