Перенаправление пользователя по определённому адресу после авторизации Django
Проблема следующая: после того как пользователь ввёл свои данные в форму на странице /accounts/login
, при успешном входе его должно направлять на страницу, соответствующую его username /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 %}Вход в личный кабинет{% endblock %}</title>
</head>
<body>
<div class="login-container">
<h2>Вход в личный кабинет</h2>
<form method="post">
{{ form.as_p }}
{% csrf_token %}
<p><input type="submit" value="Вход"></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)
попробуй через f-string. Они имеют тип данных строк, тот самый тип, который требуется в передачу redirect(). Просто вставь нужный маршрут в redirect() и с помощью f-string вставь переменную твоего уникального slug для пользователя, или же id.