私のプロジェクトでは、ビューのカスタム権限を実装しようとしていました。コンフィギュレーション・チームはそれが当てはまらない場合は、外のユーザーを要求し、ブロックしているチームのページに一致した場合DRFカスタム権限がビューをブロックしない
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
非常にシンプル、チェック:私はこのようになりますされ、permissions.py
に許可を作成しました。
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を返すという事実を知っていますか?ページのFalseを返しますが、Trueを返したようなページにはまだアクセスできます。ここに何か不足していますか?
ビューのコードを追加できますか? – ilse2005
ええ、私は今それを追加しました。それは本当にあまりありません – dnsko