Перенаправление пользователя на определенный адрес после входа в Django
Проблема заключается в следующем: после того, как пользователь ввел свои данные в форму на странице /accounts/login
, при успешном входе он должен быть перенаправлен на страницу, соответствующую его имени пользователя ``/username``. Одновременно с этим происходит перенаправление в админ-панель и у каждого админа будут отображаться свои модели. Я не понимаю, как можно украсть имя текущего пользователя, а затем разрешить только этому пользователю войти в админ-панель, соответствующую его имени. Например, пользователь ввел имя ntz и какой-то пароль, после этого он должен попасть на /ntz/ - страницу админки этого пользователя. Другие пользователи никак не смогут туда попасть. Один пользователь - одна админ-панель.
Вот что есть в коде:
#urls.py
from django.urls import path, include
from .views import main, CustomLoginView
from PKM.admin import pkm_admin_site
from NTZ.admin import ntz_admin_site
urlpatterns=[
path('', main, name='main'),
path('ntz/',ntz_admin_site.urls),
path('pkm/', pkm_admin_site.urls),
path('accounts/', include('django.contrib.auth.urls')),
path('accounts/login/', CustomLoginView.as_view(), name='login')
]
#login.html
{% load static %}
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Log in to your personal account{% endblock %}</title>
</head>
<body>
<div class="login-container">
<h2>Login to your personal account</h2>
<form method="post">
{{ form.as_p }}
{% csrf_token %}
<p><input type="submit" value="Input"></p>
</form>
</div>
</body>
</html>
#views.py
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
# Create your views here.
def main(request):
return render(request, 'default.html')
# views.py
from django.contrib.auth.views import LoginView
from django.shortcuts import redirect
class CustomLoginView(LoginView):
def form_valid(self, form):
user = form.get_user()
if self.request.user.username == 'pkm':
return redirect('/pkm/')
elif self.request.user.get_username() == 'ntz':
return redirect('/ntz/')
else:
return super().form_valid(form)
Я изменил вид с классного на функциональный, но ничего не помогло(
).После входа в систему URL-адрес перенаправления управляется в методе get_success_url.
https://github.com/django/django/blob/main/django/contrib/auth/views.py#L40
class CustomLoginView(LoginView):
#def form_valid(self, form):
# user = form.get_user()
# if self.request.user.username == 'pkm':
# return redirect('/pkm/')
# elif self.request.user.get_username() == 'ntz':
# return redirect('/ntz/')
# else:
# return super().form_valid(form)
def get_success_url(self):
if self.request.user.username == 'pkm':
return redirect('/pkm/')
elif self.request.user.get_username() == 'ntz':
return redirect('/ntz/')
else:
return super().get_success_url()