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

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")
]

效果验证

三个需求全部可以满足:

  1. 未登录状态访问localhost:8000/admin,会自动跳转到Admin默认登录页,展示正常
  2. 输入账号密码登录成功后,会自动跳转到/test_page,不会进入Admin后台首页
  3. 登录状态下再次访问localhost:8000/admin,无需二次登录,直接展示Admin后台页面

注意事项

不要直接修改 Django 安装目录下的contrib/admin/sites.py源码,否则后续Django版本升级会覆盖你的修改,自定义AdminSite是官方推荐的扩展方式,兼容所有Django 2.2+版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:45:03