Python 如何在基于Django类的视图中限制用户组的访问?

Python 如何在基于Django类的视图中限制用户组的访问?,python,django,django-views,Python,Django,Django Views,查看 问题:我想在基于django类的视图中使用权限限制。如果登录用户属于学生组,那么我想重定向到student dashurl。如果用户来自教师,它将重定向到teacher dashurl。如果学生用户试图访问教师仪表板,那么我想从教师仪表板限制该学生用户,并呈现404错误?如果有任何帮助,我将不胜感激 class STListView(ListView): queryset = Article.objects.exclude(story_status='sn') tem

查看

问题:我想在基于django类的视图中使用权限限制。如果登录用户属于学生组,那么我想重定向到
student dash
url。如果用户来自教师,它将重定向到
teacher dash
url。如果学生用户试图访问教师仪表板,那么我想从教师仪表板限制该学生用户,并呈现404错误?如果有任何帮助,我将不胜感激

   class STListView(ListView):
    queryset = Article.objects.exclude(story_status='sn')
    template_name = 'index_page.html'
    context_object_name = 'list'

    def get_context_data(self, **kwargs):
        context = super(STListView, self).get_context_data(**kwargs)
        group = self.request.user.groups.filter(user=self.request.user)[0]
        if group.name == "student":
            return HttpResponseRedirect(reverse('student-dash'))
        elif group.name == "teacher":
            return HttpResponseRedirect(reverse('teacher-dash'))
        elif group.name == "Manger":
            return HttpResponseRedirect(reverse('manger-dash'))
        return context

有一些方法可以将其归档

尝试查看所需的
权限

如果发出请求的用户不符合权限,则将重定向到
登录\u url
(它可能是应用程序的任何url)

另一种方法是使用
用户通过测试

如果传递函数,用户可以查看视图,否则将重定向到应用程序的特定URL:

from django.contrib.auth.decorators import user_passes_test

def email_check(user):
    return user.groups == 'student'

@user_passes_test(email_check)
def my_view(request):
    ...
是关于权限的Django文档

from django.contrib.auth.decorators import user_passes_test

def email_check(user):
    return user.groups == 'student'

@user_passes_test(email_check)
def my_view(request):
    ...