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/для ОП)

Другие вопросы по тегам