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

如何在Django中实现单登录URL按用户组跳转至不同应用

Django实现统一登录后按用户组自动跳转的方案

1. 配置统一登录路由

在项目根目录的urls.py中添加统一登录URL,替换原两个应用各自的登录路由:

from django.contrib import admin
from django.urls import path, include
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.unified_login, name='unified_login'),  # 统一登录入口
    path('dashboard/', include('Dashboard.urls')),
    path('front/', include('FrontView.urls')),
]

2. 编写统一登录视图

在项目根目录的views.py中实现自定义登录逻辑,验证用户后根据所属组自动跳转:

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import AuthenticationForm

def unified_login(request):
    if request.method == 'POST':
        form = AuthenticationForm(request, data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            
            # 根据用户组判断跳转目标(需提前在后台创建对应组)
            if user.groups.filter(name='dashboard_users').exists():
                return redirect('dashboard:home')  # 替换为Dashboard首页的URL名称
            elif user.groups.filter(name='front_users').exists():
                return redirect('front:home')  # 替换为FrontView首页的URL名称
            else:
                # 处理无组用户,可跳转默认页或提示
                return redirect('/')
    else:
        form = AuthenticationForm()
    return render(request, 'registration/login.html', {'form': form})

3. 调整登录模板(可选)

如果使用自定义登录模板,确保表单提交地址指向统一登录URL:

<form method="post" action="{% url 'unified_login' %}">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">登录</button>
</form>

使用Django默认模板的话,只需保证模板路径配置正确即可。

4. 应用权限控制(关键)

为防止用户直接通过URL访问不属于自己的应用,给两个应用的视图添加组验证:

  • Dashboard应用视图示例:
from django.contrib.auth.decorators import user_passes_test
from django.shortcuts import render

def is_dashboard_user(user):
    return user.groups.filter(name='dashboard_users').exists()

@user_passes_test(is_dashboard_user)
def dashboard_home(request):
    return render(request, 'dashboard/home.html')
  • FrontView应用视图示例:
from django.contrib.auth.decorators import user_passes_test
from django.shortcuts import render

def is_front_user(user):
    return user.groups.filter(name='front_users').exists()

@user_passes_test(is_front_user)
def front_home(request):
    return render(request, 'front/home.html')

额外配置

在项目settings.py中指定统一登录地址,确保Django默认的登录重定向生效:

LOGIN_URL = '/login/'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:34:57