Django единая страница входа для rest_framework и консоли администратора

Я делаю Django-приложение, которое использует rest_frameworks (под urlpattern '/api') и консоль администратора (для управления пользователями и группами, под urlpattern '/admin'). В настоящее время они оба имеют свою собственную страницу входа. Я хочу, чтобы обе они использовали одну и ту же страницу входа (единый URL), и если пользователь успешно вошел, то, если это суперпользователь, он перенаправлялся на консоль администратора, а если не суперпользователь, то перенаправлялся на '/foo'.

Я знаю, что можно вставить шаблон url над admin.site.urls, чтобы переопределить его шаблоны url для входа (и выхода), но я хочу, чтобы страница входа была '/login', а не '/admin/login'.

Чтобы получить общую страницу входа в систему для представлений фреймворка Django REST и консоли администратора Django, вы можете создать пользовательское представление аутентификации и направлять все запросы на вход в систему в это представление. Затем в пользовательском представлении аутентификации вы можете проверить, является ли пользователь суперпользователем, и перенаправить его соответствующим образом.

Вот общий подход, которого вы можете придерживаться:

  1. Создайте пользовательское представление аутентификации:

Создайте новое представление для аутентификации, например, в файле views.py:


from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login

def custom_login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)

        if user is not None:
            login(request, user)
            if user.is_superuser:
                return redirect('/admin/')
            else:
                return redirect('/foo/')
        else:
            # Handle invalid login credentials
            pass

    return render(request, 'custom_login.html')
  1. Обновление шаблонов URL:

Обновите файл urls.py, чтобы включить в него пользовательское представление входа и направить на него запросы входа.

from django.contrib import admin
from django.urls import path
from .views import custom_login

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('your_api_app.urls')),
    path('login/', custom_login, name='custom_login'),
]

Эта конфигурация предполагает, что у вас есть отдельный urls.py для вашего API (your_api_app.urls). Настройте его в соответствии со структурой вашего проекта.

Теперь, когда пользователи пытаются получить доступ к консоли администратора или вашему REST API и не проходят аутентификацию, они будут перенаправлены на URL /login. После успешного входа суперпользователи будут перенаправлены на /admin/, а остальные - на /foo/. Настройте URL и логику в соответствии с вашими требованиями.

Вернуться на верх