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

Django实现is_staff用户登录后自动跳转至dashboard专属页面方案

Django登录后按用户角色自动跳转视图的实现

问题背景

现有两个可正常运行的视图函数:

  • 专为is_staff用户提供的专属视图
  • 面向所有登录用户的通用视图
    当前staff用户登录后,可手动在URL后添加/dashboard路径访问对应路由,普通用户无权限访问该路径,该逻辑符合预期。

需求说明

希望在登录环节就完成身份判断,user.is_staff为真的用户直接跳转至/dashboard路径,无需先进入首页。

初始代码

views.py

@staff_member_required
def staff_dashboard(request):
    users = User.objects.all()
    customer = Customer.objects.all()
    accounts = Account.objects.all()
    context = {
            'users': users,
            'customer': customer,
            'accounts': accounts
            }
    return render(request, 'bank_app/dashboard.html', context)


@login_required
def index(request):
    customer = Customer.objects.filter(user=request.user)
    accounts = Account.objects.filter(user=request.user)
    context = {
            'customer': customer,
            'accounts': accounts
            }
    return render(request, 'bank_app/index.html', context)

urls.py

urlpatterns = [
         path('dashboard', views.staff_dashboard, name='staff_dashboard'),
         path('', views.index, name='index'),
         path('create', views.create, name='create'),
         path('createaccount', views.createaccount, name='createaccount'),
         path('details/<int:pk>', views.details, name='details'),
        ] 

已尝试未生效方案

尝试通过模板继承做身份判断切换内容块,未解决问题:

<p>Welcome {{ user }}</p>

 {% if user.is_staff  %}
     {% block staffcontent  %}
     {% endblock %}
 {% else %}
     {% block content %}
     {% endblock %}
 {% endif %}

   {% block footer %}
   {% endblock %}

更新:可运行但待重构代码

当前以下代码可运行,但需要按要求重构:教师要求在条件语句内部使用装饰器(仅staff可查看部分内容),并使用HttpResponse展示正确的html页面。

views.py

@login_required  
def index(request):  
    if request.user.is_staff:  
##        @staff_member_required  
##       def staff_dashboard(request):  
            users = User.objects.all()  
            customer = Customer.objects.all()  
            accounts = Account.objects.all()  
            context = {  
                    'users': users,  
               'customer': customer,  
                    'accounts': accounts  
}  
            return render(request, 'bank_app/dashboard.html', context)  
##            return HttpResponseRedirect('staff_dashboard')  
    else:  
##          def user_dashboard():  
            customer = Customer.objects.filter(user=request.user)  
            accounts = Account.objects.filter(user=request.user)  
            context = {  
                    'customer': customer,  
                    'accounts': accounts  
                    }  
            return render(request, 'bank_app/index.html', context)  

urls.py

urlpatterns = [
          path('', views.index, name='index'),
##        path('staff_dashboard', views.index, name='staff_dashboard'),
##        path('user_dashboard/', views.index, name='user_dashboard'),
]

最终解决方案

拆分视图逻辑、修正路由配置后的最终可运行代码如下:

views.py

@login_required
def index(request):
    if request.user.is_staff:
        return HttpResponseRedirect('staff_dashboard/')
    else:
        return HttpResponseRedirect('user_dashboard/')


@staff_member_required
def staff_dashboard(request):
    users = User.objects.all()
    customer = Customer.objects.all()
    accounts = Account.objects.all()
    context = {
            'users': users,
            'customer': customer,
            'accounts': accounts
            }
    return render(request, 'bank_app/dashboard.html', context)


@login_required
def user_dashboard(request):
    customer = Customer.objects.filter(user=request.user)
    accounts = Account.objects.filter(user=request.user)
    context = {
            'customer': customer,
            'accounts': accounts
            }
    return render(request, 'bank_app/index.html', context)

urls.py

urlpatterns = [
        path('', views.index, name='index'),
        path('staff_dashboard/', views.staff_dashboard, name='staff_dashboard'),
        path('user_dashboard/', views.user_dashboard, name='user_dashboard'),
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:18:03