Django Admin登录成功后自定义跳转指定页面的实现问题
Django Admin 登录跳转自定义实现方案
不需要修改 Django 原生源码,通过自定义扩展 AdminSite 即可满足全部需求,具体实现步骤如下:
- 第一步:在你的项目对应应用下新建自定义 AdminSite 类,重写登录逻辑
# 例如在 yourapp/custom_admin.py 中写入以下代码 from django.contrib.admin import AdminSite from django.shortcuts import redirect from django.urls import reverse class CustomAdminSite(AdminSite): def login(self, request, extra_context=None): # 调用父类原生登录逻辑,获取默认响应 response = super().login(request, extra_context=extra_context) # 仅处理登录提交的POST请求,且用户验证通过的场景 if request.method == "POST" and request.user.is_authenticated: next_url = request.GET.get("next", "") # 判断是否是直接访问/admin触发的登录,next默认值为/admin/ if next_url == "/admin/": # 此处如果是命名URL,推荐用reverse("test_page的路由名")代替硬编码路径 return redirect("/test_page/") return response
- 第二步:替换默认 AdminSite 实例,在项目根路由文件
urls.py中加入以下代码
from django.contrib import admin from yourapp.custom_admin import CustomAdminSite # 用自定义的AdminSite替换默认实例 admin.site = CustomAdminSite() # 自动发现所有已注册的后台模型,保持原有Admin配置不变 admin.autodiscover() urlpatterns = [ # 原有admin路由保持不变即可 path("admin/", admin.site.urls), # 其他路由保持不变 # path("test_page/", your_view, name="test_page") ]
效果验证
三个需求全部可以满足:
- 未登录状态访问
localhost:8000/admin,会自动跳转到Admin默认登录页,展示正常 - 输入账号密码登录成功后,会自动跳转到
/test_page,不会进入Admin后台首页 - 登录状态下再次访问
localhost:8000/admin,无需二次登录,直接展示Admin后台页面
注意事项
不要直接修改 Django 安装目录下的contrib/admin/sites.py源码,否则后续Django版本升级会覆盖你的修改,自定义AdminSite是官方推荐的扩展方式,兼容所有Django 2.2+版本。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

