Django: перенаправить выход администратора из системы для входа в систему allauth
Я использую страницу входа django-allauth для входа пользователей в мою панель администратора. Это работает нормально, но когда они выходят из админ-панели, я хочу, чтобы они отправлялись прямо обратно на страницу / account / login / (предпочтительно на /accounts/login/? Next=/admin/surveyys / survey /), а точнее чем на страницу / admin / logout /, которая говорит: "Спасибо, что уделили нам время на сайте". Я попробовал свойство LOGOUT_URL в моем файле настроек, но, похоже, оно не соответствует тому, что я описал выше. Вот некоторые из моих соответствующих кодов:
# urls.py
from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView
from mysite import views
from django.contrib import admin
admin.autodiscover()
from django.contrib.auth.decorators import login_required
admin.site.login = login_required(admin.site.login)
from django.contrib.auth import views as auth_views
urlpatterns = patterns('',
url(r'^$', TemplateView.as_view(template_name='landingpage.html'), name='landingpage'),
url(r'^surveys/', include('surveys.urls', namespace="surveys")),
url(r'^admin/', include(admin.site.urls)),
url(r'^submitfeedback/$', views.submitfeedback, name='submitfeedback'),
# tried this but it didn't work: url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/accounts/login/'}),
# tried this but it didn't work: url(r'^admin/logout/$', 'django.contrib.auth.views.logout', {'next_page': '/accounts/login/'}),
## below for django-allauth
url(r'^accounts/', include('allauth.urls')),
)
# settings.py
LOGIN_REDIRECT_URL = "/admin/surveys/survey/"
LOGOUT_URL = "/accounts/login/"
3 ответа
Я думаю, что самый простой способ сделать это не в views.py, а в самом шаблоне. Что вы хотите сделать, это скопировать файл admin/base.html (который вы видите на Github здесь, в папку шаблонов проектов), которую вы можете затем перезаписать по мере необходимости. Этот шаблон содержит всю информацию заголовка, которая наследуется остальной частью администратора. шаблоны. Найдите строку, которая гласит:
<a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
и просто измените это на:
<a href="{% url 'account_logout' %}">{% trans 'Log out' %}</a>
И теперь он должен соответствовать формату выхода из системы allauth на остальной части вашего сайта.
Добавлять url(r'^admin/logout/$', 'yourappname.views.signout')
в urls.py
перед включением admin.site.urls
как это:
urlpatterns = [
url(r'^admin/logout/$', 'yourappname.views.signout'),
url(r'^admin/', admin.site.urls),
url(r'', include('appname.urls'))
]
Конечно, в вашем приложении вы должны определить вид выхода:
def signout(request):
logout(request)
return redirect(reverse('yourappname:index')) # or wherever you want
Этот вопрос стар как мир (сейчас 2023 год, Django 4.2.4), и вы можете добиться этого, добавив в url.py вашего проекта.
import allauth.account.views
...
urlpatterns = [
path("admin/logout/", allauth.account.views.logout),
...
]
Это приведет к выходу из системы и отправит вас обратно к входу в систему allauth. Отдельно,LOGIN_REDIRECT_URL
можно установить желаемое перенаправление (/admin/surveys/survey/
для ОП)