You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置Django会话超时后重定向至自定义登录URL而非默认Admin登录页?

Django会话过期重定向自定义登录页的实现方案

当然可以实现!Django本身就有足够灵活的配置来搞定这个需求,不用额外写复杂的代码。我给你一步步讲怎么弄:

1. 配置全局登录重定向目标

首先,在项目的settings.py里把全局的登录重定向目标改成你的自定义登录页。找到LOGIN_URL这个配置项(如果没有就自己加一行),设置成你的登录路径:

LOGIN_URL = '/myproject/login'
# 或者如果你的URL配置里给登录视图起了name='login',也可以写成LOGIN_URL = 'login'

这样一来,所有用Django内置登录保护的视图(比如加了@login_required装饰器的视图、用LoginRequiredMixin的类视图),在会话过期或者用户未登录时,都会自动重定向到你指定的/myproject/login。

2. 保留Admin站点的独立登录页

别担心admin的登录页会受影响,Django的admin站点自带独立的登录逻辑:默认情况下,当用户直接访问/admin且未登录时,会自动跳转到/admin/login,不会受全局LOGIN_URL的影响。这是因为admin的视图内部已经硬编码了自己的登录路径,所以你不用额外修改admin的配置。

万一出现路由冲突怎么办?

如果发现admin的登录也被跳转到自定义登录页了,那可能是你的URL路由配置有冲突。这时候可以在urls.py里把admin的登录路由单独提出来,放在admin主路由前面,确保优先匹配:

from django.contrib import admin
from django.urls import path

urlpatterns = [
    # 先配置admin的登录路由,确保优先匹配
    path('admin/login/', admin.site.login, name='admin_login'),
    # 再配置admin的主路由
    path('admin/', admin.site.urls),
    # 你的自定义登录路由
    path('myproject/login/', your_custom_login_view, name='custom_login'),
    # 其他业务路由...
]

3. 自定义视图的登录重定向处理

如果你的某些自定义视图没有用Django的内置登录保护,而是自己判断用户是否登录,那记得在重定向的时候用settings.LOGIN_URL,而不是写死路径,这样以后改配置也更灵活:

from django.conf import settings
from django.shortcuts import redirect

def my_custom_view(request):
    if not request.user.is_authenticated:
        return redirect(settings.LOGIN_URL)
    # 你的视图业务逻辑

这样就能完全实现你要的效果:会话过期时跳自定义登录页,只有直接访问/admin的时候才用admin的登录页。

内容的提问来源于stack exchange,提问作者nKn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:32:06