Распознает ли Django автоматически registration/login.html в качестве шаблона входа в систему?

Распознает ли Django автоматически templates/registration/login.html как страницу входа в систему? Я работаю над проектом Django и хочу использовать встроенную систему аутентификации Django для входа пользователя в систему. Я не указывал путь к /login в urls.py но он работает с url/accounts/login/?далее=/.

Мой вопрос таков:

  1. Распознает ли Django автоматически registration/login.html в качестве шаблона входа по умолчанию?
  2. Если да, то как Django определяет местоположение этого файла?
  3. Нужно ли мне что-либо устанавливать в settings.py, чтобы это заработало?
  4. Где прописана логика для этого встроенного входа в систему

Да, Django автоматически распознает registration/login.html в качестве шаблона входа по умолчанию при использовании встроенной системы аутентификации Django django.contrib.auth Вот как это работает

Как Django определяет местоположение этого файла?

LoginView программа Django выполняет поиск registration/login.html в каталогах, указанных в параметре TEMPLATES в разделе 'DIRS', и в любых установленных приложениях, которые имеют templates/registration/login.html файл.

Например, если ваш параметр ШАБЛОНЫ в settings.py выглядит следующим образом

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / "templates"],  # Django searches here
        'APP_DIRS': True,  # Django also searches in installed apps
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Django будет искать templates/registration/login.html в BASE_DIR/templates/ каталогах вашего проекта и в templates/ каталогах любых установленных приложений.

Нужно ли мне что-либо устанавливать в settings.py , чтобы это заработало?

Нет, по умолчанию LoginView в Django автоматически выполняется поиск registration/login.html. Однако вы можете переопределить URL-адрес входа по умолчанию, указав его явно в settings.py

LOGIN_URL = "/custom-login/"  # Change default login URL
LOGIN_REDIRECT_URL = "/"  # Redirect after successful login

Если вы переопределяете LOGIN_URL, вам нужно определить шаблон URL для него в urls.py

from django.contrib.auth import views as auth_views

urlpatterns = [
    path("custom-login/", auth_views.LoginView.as_view(template_name="myapp/custom_login.html"), name="login"),
]

Где логика для этого встроенного входа в систему?

Встроенная логика входа в систему Django реализована в LoginView, который находится в

django/contrib/auth/views.py

Основная логика входа в систему определена в LoginView, которая расширяет FormView и использует систему аутентификации Django

class LoginView(FormView):
    template_name = 'registration/login.html'
    authentication_form = AuthenticationForm
    redirect_field_name = REDIRECT_FIELD_NAME

Фактическая логика аутентификации обрабатывается функциями authenticate() и login() в Django, которые расположены в

django/contrib/auth/__init__.py

Ключевой функцией, обрабатывающей аутентификацию, является

def login(request, user, backend=None):

Эта функция добавляет сеанс пользователя и управляет аутентификацией.

джанго-док

полезный пост-1

полезный пост-2

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