Я все еще новичок в Django. У меня есть пользователь с правами администратора и обычный пользователь, который не является администратором. При входе администратора он должен быть перенаправлен на «/ admin_section», а при обычном входе пользователя он должен быть перенаправлен на первую страницу «/». Кроме того, администратор должен иметь возможность перейти на первую страницу '/' и увидеть страницу, которую может видеть обычный пользователь.
Я пытался найти ответ для это и единственное, что я нахожу, это то, что я могу использовать request.user.is_superuser в представлении и спросить, является ли пользователь суперпользователем / администратором или нет. Но тогда проблема заключается в том, что администратор не сможет переходить на первую страницу. Я также установил для login_redirect_url значение «LOGIN_REDIRECT_URL = '/'», что означает, что при каждом входе пользователя в систему они будут перенаправляться на главную страницу, но это не должно быть так.
Вот мой код (пока файл views.py):
def home(request):
# if the user is not logged-in, show the loginpage
if not request.user.is_authenticated:
return HttpResponseRedirect('login')
# if the user is logged-in, show the frontpage
return render(request, 'mainapp/index.html')
# return the view for the admin section
def admin(request):
# if the user is logged-in & is an admin - show the admin section
if request.user.is_authenticated and request.user.is_superuser:
return render(request, 'mainapp/admin.html')
return redirect('home') # redirects to the home view
forms.py:
from django.contrib.auth.forms import AuthenticationForm
from django import forms
from django.contrib.auth import logout
from django.contrib.auth.mixins import LoginRequiredMixin, AccessMixin
# a class which act as a view - it displays the login-form
class LoginForm(AuthenticationForm, AccessMixin):
username=forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
password=forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control'}))
urls.py:
path('login/', views_auth.LoginView.as_view(form_class=LoginForm, redirect_authenticated_user=True), name='login'), # login-page