首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在会话超时时在Django管理中设置自定义管理登录URL?

问如何在会话超时时在Django管理中设置自定义管理登录URL?
EN

Stack Overflow用户
提问于 2019-05-09 10:53:05
回答 2查看 4.7K关注 0票数 6

我编写了一个Django应用程序,它的外部身份验证系统可以在某个URL (例如,https://.../myproject/login)上实现。效果很好。

但是,当会话到期时,用户将被重定向到默认登录url,即https://.../myproject/admin)。我想改变应用程序的行为,以便如果会话过期,用户应该被重定向到https://.../myproject/login,并且只有在显式打开时才使用/admin登录。

在Django有内置的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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 /)

代码语言:javascript
复制
LOGIN_URL = '/myproject/login/'

注销后重定向到登录页(默认为无)。

代码语言:javascript
复制
LOGOUT_REDIRECT_URL = '/myproject/login/'
票数 4
EN

Stack Overflow用户

发布于 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))的正上方。

代码语言:javascript
复制
urlpatterns = [
   url(r'^admin/login/?$', LoginView.as_view(), name='admin:login'),
   url(r'^admin/', include(admin.site.urls)),
]

优点:

  • 在/myproject/ admin /login上呈现外部系统的登录页,而不是默认的Django管理登录页面

缺点:

  • URL仍然指向myproject/admin/登录
  • 无法访问默认的管理登录页面。

办法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))。

代码语言:javascript
复制
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'))
代码语言:javascript
复制
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)),
]

优点:

  • URL更改为myproject/登录

缺点:

  • 您必须为默认登录页添加额外的代码。

我建议采用方法2来解决问题中提到的问题。

谢谢。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56057801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档