Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DRF自定义权限不阻止视图_Python_Django_Django Rest Framework - Fatal编程技术网

Python DRF自定义权限不阻止视图

Python DRF自定义权限不阻止视图,python,django,django-rest-framework,Python,Django,Django Rest Framework,因此,对于我的项目,我试图实现视图的自定义权限。我在permissions.py中创建了权限,如下所示: class TeamViewPermission(permissions.BasePermission): """ Global permission for viewing team pages """ def has_permission(self, request, view): team_id = self.kwargs.get('t

因此,对于我的项目,我试图实现视图的自定义权限。我在
permissions.py
中创建了权限,如下所示:

class TeamViewPermission(permissions.BasePermission):
    """
    Global permission for viewing team pages
    """

    def has_permission(self, request, view):
        team_id = self.kwargs.get('team_id')
        teamqs = MAIN_TEAMS.all()
        pk_list = []
        for item in MAIN_TEAMS:
            pk_list.append(str(item.pk))
        if team_id in pk_list:
            return True
        return False
非常简单,检查配置团队是否与您请求的团队页面匹配,如果不匹配,则阻止用户访问

视图.py

class PlayerList(ListView):

    model = player_model
    template_name = 'player_list.html'
    permission_classes = (TeamViewPermission, )

def get_team(self):
    if not hasattr(self, '_team'):
        team_id = self.kwargs.get('team_id')
        self._team = team_model.objects.get(pk=self.kwargs.get('team_id'))
    return self._team

def get_context_data(self, *args, **kwargs):
    context = super().get_context_data(*args, **kwargs)
    context['team'] = self.get_team()
    return context

def get_queryset(self, *args, **kwargs):
    queryset = super().get_queryset(*args, **kwargs)
    return queryset.filter(team_id=self.kwargs.get('team_id'))

我知道页面在应该返回True或False时返回True或False,因为我调试了它,尽管它没有阻止页面?该页面返回False,但我仍然可以像返回True一样访问该页面。。我在这里遗漏了什么吗?

看起来您混合了djangos基于类的视图和DRF视图。
ListView
是来自django而非DRF的基于类的视图。因此,它不允许设置
权限\u类


查看如何使用DRF api视图。

您可以添加视图的代码吗?是的,我现在已经添加了。真的不多啊我明白了。。真是个错误,哈哈。下次我会更加关注这个问题。谢谢你的帮助!不客气。如果我的回答有帮助,请接受并投票。