Распознает ли Django автоматически registration/login.html в качестве шаблона входа в систему?
Распознает ли Django автоматически templates/registration/login.html как страницу входа в систему? Я работаю над проектом Django и хочу использовать встроенную систему аутентификации Django для входа пользователя в систему. Я не указывал путь к /login в urls.py но он работает с url/accounts/login/?далее=/.
Мой вопрос таков:
- Распознает ли Django автоматически registration/login.html в качестве шаблона входа по умолчанию?
- Если да, то как Django определяет местоположение этого файла?
- Нужно ли мне что-либо устанавливать в settings.py, чтобы это заработало?
- Где прописана логика для этого встроенного входа в систему
Да, 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):
Эта функция добавляет сеанс пользователя и управляет аутентификацией.