我编写了一个Django应用程序,它的外部身份验证系统可以在某个URL (例如,https://.../myproject/login)上实现。效果很好。
但是,当会话到期时,用户将被重定向到默认登录url,即https://.../myproject/admin)。我想改变应用程序的行为,以便如果会话过期,用户应该被重定向到https://.../myproject/login,并且只有在显式打开时才使用/admin登录。
在Django有内置的方法吗?
发布于 2019-05-17 14:16:16
您可以使用LOGIN_URL和LOGOUT_REDIRECT_URL
https://docs.djangoproject.com/en/2.2/ref/settings/#login-url
重定向到myproject/login以进行登录(默认重定向到/accounts/ login /)
LOGIN_URL = '/myproject/login/'注销后重定向到登录页(默认为无)。
LOGOUT_REDIRECT_URL = '/myproject/login/'发布于 2019-05-17 18:09:12
Django管理员在会话过期或会话丢失时将用户重定向到/ admin /登录。
有几种方法可以将用户重定向到https://.../myproject/login而不是https://.../myproject/admin/login。
方法1:
用myproject/login视图覆盖myproject/admin/login的视图。
假设myproject/login使用LoginView呈现外部系统的登录页面,然后在myproject/myproject/urls.py中将url(r'^admin/login/?$', LoginView.as_view(), name='admin:login')添加到url(r'^admin/', include(admin.site.urls))的正上方。
urlpatterns = [
url(r'^admin/login/?$', LoginView.as_view(), name='admin:login'),
url(r'^admin/', include(admin.site.urls)),
]优点:
缺点:
办法2:
重写myproject/admin/login url的视图,并将用户重定向到myproject/login
让我们创建一个新视图AdminLoginView,然后在myproject/myproject/urls.py中的url(r'^admin/login/?$',AdminLoginView.as_view(),name='admin:login')之上添加url(r‘^admin/,include(admin.site.urls))。
from django.core.urlresolvers import reverse
class AdminLoginView(TemplateView):
def get(self, request, *args, **kwargs):
"""
Assuming the name of the external system's login url is "login"
"""
return HttpResponseRedirect(reverse('login'))urlpatterns = [
url(r'^admin/login/?$', AdminLoginView.as_view(), name='admin:login'),
url(r'^admin/default-login/?$', admin.site.login, name='default-admin-login'),
url(r'^admin/', include(admin.site.urls)),
]优点:
缺点:
我建议采用方法2来解决问题中提到的问题。
谢谢。
https://stackoverflow.com/questions/56057801
复制相似问题