如何将 is_staff 用户重定向到 Django 中的自定义模板?

Posted

技术标签:

【中文标题】如何将 is_staff 用户重定向到 Django 中的自定义模板?【英文标题】:How to redirect is_staff user to custom template in Django? 【发布时间】:2021-01-14 20:42:47 【问题描述】:

我有一个简单的问题:我尝试根据用户角色(员工/普通)将登录页面重定向到另一个页面。普通用户拥有自己的仪表板,员工用户拥有整体仪表板。

普通用户的重定向功能运行良好。但是,对于员工用户,它不断将我重定向到 django-admin 页面而不是我的自定义模板。

我尝试了this,但它不起作用。

views.py

#login
def login(request):
    if request.user.is_authenticated:
        if request.user.is_staff:
            return redirect('staff_dashboard')
        else:
            return redirect('user_dashboard')
    else:
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("password")

            user = auth.authenticate(request,username=username,password=password)

            if user is not None:
                if user.is_staff:
                    auth.login(request,user)
                    return redirect('staff_dashboard')
                else:
                    auth.login(request,user)
                    return redirect('user_dashboard')
            else:
                messages.info(request,"Username or Password is incorrect")
                return redirect('login')


#staff_dashboard
@login_required(login_url='login')
def staff_dashboard(request):
    vid_size = []
    img_query_set = model_images.objects.all()
    img_query_set_count = model_images.objects.all().count()
    vid_query_set = model_videos.objects.all()
    vid_query_set_count = model_videos.objects.all().count()
    
    for item in vid_query_set:
        size = round(item.vid_path.size / 1000000,1)
        vid_size.append(size)
    
    context = 
        "img_query_set": img_query_set,
        "vid_query_set": vid_query_set,
        "img_query_set_count": img_query_set_count,
        "vid_query_set_count": vid_query_set_count,
    
    return render(request,'admin/index.html',context)

urls.py

from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('', views.home, name='home'),
    path('login', views.login, name='login'),
    path('user/dashboard', views.user_dashboard, name='user_dashboard'),
    path('staff/dashboard', views.staff_dashboard, name='staff_dashboard'),
]

【问题讨论】:

您是否尝试过使用自己的模板进行此操作?您似乎正在使用 django 管理模板,因此这可能是您的问题的一部分。 它会正确地重定向你,并正确呈现 admin/index.html 模板 【参考方案1】:

刚刚解决了。您不能在模板文件夹中创建名称为“admin”的文件。它将与 Django-admin 模板冲突。我重命名了文件并且它现在可以工作了。

【讨论】:

以上是关于如何将 is_staff 用户重定向到 Django 中的自定义模板?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Security 将登录的用户重定向到他的首页,将未登录的用户重定向到不同的用户

如何将没有适当角色的用户重定向到不允许?

如何将用户重定向到另一个域 .htaccess

如果未登录,如何将用户重定向到登录页面

会话超时后如何将用户重定向到自定义网页?

Symfony - 如何将用户重定向到登录后访问的最后一个页面?