Ich habe eine Seite, auf der verschiedene Spieler eines Teams angezeigt werden. In der Konfiguration können Sie zwischen den Teams wechseln. Wenn Sie es also setzen TEAM_NAME = 'test'
, wird das Testteam offensichtlich geladen. Das Problem ist, dass, wenn Sie sagen TEAM_NAME = 'test2'
, es für dieses Team gestartet wird, ich aber trotzdem die URL ändern kann, um zwischen Teams zu wechseln (während ich nur das Team anzeigen sollte, das ich ausgewählt habe)
Die URL sieht wie folgt aus : http://127.0.0.1:8000/team/1/player/
, wo 1
wäre das erste erstellt Team, das ist test
.
Wenn ich die Ansicht lade, möchte ich einige Berechtigungsprüfungen durchführen lassen, um festzustellen, ob das Team der aktuellen Ansicht mit dem Team in der Konfiguration identisch ist.
Dies ist die Ansicht:
class PlayerList(ListView):
model = player_model
template_name = 'player_list.html'
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'))
def get(self, request, *args, **kwargs):
return super(PlayerList, self).get(request, *args, **kwargs)
Sie können dies in einer get
Methode tun, um den Zugriff zu blockieren / zuzulassen:
from django.core.exceptions import PermissionDenied
def get(self, request, *args, **kwargs):
team_id = self.kwargs.get('team_id')
team = team_model.objects.get(pk=team_id)
if team.name != TEAM_NAME:
raise PermissionDenied
else:
return super(PlayerList, self).get(request, *args, **kwargs)
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen