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

Django实现rest_framework与admin共用/login统一登录页的需求

实现Django Admin与DRF共用/login登录页并按角色重定向

1. 自定义登录视图

创建继承自Django内置LoginView的自定义视图,重写get_success_url实现按用户角色跳转的逻辑:

# 你的app的views.py文件
from django.contrib.auth.views import LoginView
from django.urls import reverse_lazy

class CustomLoginView(LoginView):
    # 使用Django默认登录模板,可替换为自定义模板路径
    template_name = 'registration/login.html'

    def get_success_url(self):
        # 超级用户登录后跳转至admin控制台
        if self.request.user.is_superuser:
            return reverse_lazy('admin:index')
        # 普通用户跳转至/foo页面
        return reverse_lazy('foo')

2. 配置URL路由

将自定义/login路由放在admin.site.urls之前,确保覆盖admin默认登录路由;同时配置DRF跳转指向该页面:

# 项目根urls.py文件
from django.contrib import admin
from django.urls import path, include
from .views import CustomLoginView
from django.contrib.auth.views import LogoutView

urlpatterns = [
    # 自定义登录路由,优先级高于admin
    path('login/', CustomLoginView.as_view(), name='login'),
    # 自定义登出路由(可选,统一登出后跳转登录页)
    path('logout/', LogoutView.as_view(next_page='/login'), name='logout'),
    # Admin控制台路由
    path('admin/', admin.site.urls),
    # DRF路由(其默认登录/登出会自动跳转到我们的自定义页面)
    path('api/', include('rest_framework.urls')),
    # 普通用户跳转目标路由(需保证name='foo'与视图中reverse_lazy对应)
    path('foo/', your_foo_view, name='foo'),
]

3. 全局配置(关键)

在项目settings.py中设置全局登录跳转地址,让DRF自动使用/login页面:

# settings.py文件
LOGIN_URL = '/login'
# 可选:登出后默认跳转回登录页
LOGOUT_REDIRECT_URL = '/login'

4. 模板说明(可选)

若使用自定义登录模板,只需包含Django登录表单渲染逻辑即可:

<!-- templates/registration/login.html -->
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">登录</button>
</form>

配置完成后:

  • Admin和DRF的登录请求都会跳转到/login页面
  • 登录成功后,超级用户自动进入admin控制台,普通用户跳转至/foo
  • 登出操作统一跳回/login页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:28:18