Выход из веб-приложения django перенаправляет на страницу выхода из админки django. Что происходит?
Я следую учебнику в книге Python Crash Course по созданию простой веб-страницы с помощью Django. Я только что создал приложение для входа и выхода пользователя на моей странице, используя стандартную систему аутентификации пользователей Django. Когда я выхожу из системы, Django не перенаправляет на шаблон, который я создал, чтобы показать, что пользователь вышел из системы. Вместо этого он перенаправляет на страницу выхода администратора Django.
Здесь представлен мой базовый файл urls.py.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('users/', include('users.urls')),
path('', include('learning_logs.urls')),
]
Здесь представлен файл urls.py моего приложения 'users'.
from django.urls import path, include
app_name = 'users'
urlpatterns = [
# Include default auth URLs
path('', include('django.contrib.auth.urls')),
]
Здесь представлен мой шаблон base.html.
<p>
<a href="{% url 'learning_logs:index' %}">Learning Log</a> -
<a href="{% url 'learning_logs:topics' %}">Topics</a>
{% if user.is_authenticated %}
Hello, {{ user.username }}.
<a href="{% url 'users:logout' %}">Log out</a>
{% else %}
<a href="{% url 'users:login' %}">Log in</a>
{% endif %}
</p>
Здесь представлен мой шаблон logout.html.
{% extends "learning_logs/base.html" %}
{% block content %}
<p>You have been logged out. Thanks for stopping by!</p>
{% endblock content %}
Вот мои установленные приложения в settings.py
INSTALLED_APPS = [
# My Apps
'learning_logs',
'users',
# Default Apps
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Когда страница перенаправляет на выход из Django Admin, url отображается как http://localhost:8000/users/logout/, что является тем url, который мне нужен. Кроме того, я использую имя пользователя и пароль администратора для входа на веб-страницу.
Любая помощь будет принята с благодарностью!
Редактирование: Используемая версия Django - 3.2.6. Версия, используемая в учебнике - 2.2
в settings.py вы можете установить logout redirect url
Попробуйте это
LOGOUT_REDIRECT_URL = '/path_to_the_page'
LOGIN_URL = '/path_to_the_page'
В настройках вы можете сделать это легко, как предположить, что у вас есть представление на основе функций
def hello(request):
return render (request, 'logout_redirect.html')
and in url
path('hello/', views.hello, name="hello")
поэтому в настройках сделайте следующее
LOGIN_URL = 'accounts:login'
LOGIN_REDIRECT_URL = 'accounts:home'
LOGOUT_REDIRECT_URL = 'accounts:home'
и второй способ просто передайте в ваших представлениях
@login_required
def user_logout(request):
logout(request)
return redirect('accounts:login')
оба типа должны быть на вашей странице первый для того, чтобы при выходе пользователя из админ панели сказать куда идти, а второй для пользовательского пользователя, чтобы сказать куда его перенаправить, так что вы можете изменить ваш logout redirect url разный для обоих разных типов пользователей или если вы хотите перенаправить на один и тот же url для обоих пользователей передайте один и тот же путь
и я рекомендую вам прочитать полную документацию по django для лучшего понимания https://docs.djangoproject.com/en/3.2/topics/auth/default/
Решено! Оказывается, шаблон выхода из системы ДОЛЖЕН называться logged_out.html, чтобы работать в этом контексте. Когда я переименовал его из logout.html, страница правильно перенаправлялась на пользовательский шаблон выхода из системы.