gpt4 book ai didi

python - DRF自定义权限不遮挡 View

转载 作者:行者123 更新时间:2023-12-01 04:01:28 25 4
gpt4 key购买 nike

因此,对于我的项目,我试图为 View 实现自定义权限。我在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

非常简单,检查配置团队是否与您请求的团队页面匹配,如果不匹配则阻止用户。

views.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 类的 View 和 DRF View 。ListView 是来自 django 的基于类的 View ,而不是来自 DRF。因此它不允许设置permission_classes

检查the docs了解如何使用 DRF api View 。

关于python - DRF自定义权限不遮挡 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36420912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com