2016-04-04 18 views
0

Ich habe einige Seite, die verschiedene Spieler eines Teams anzeigt. In der Konfiguration können Sie zwischen den Teams wechseln, wenn Sie also TEAM_NAME = 'test' setzen, lädt das offensichtlich das Testteam. Das Problem ist, dass wenn Sie TEAM_NAME = 'test2' setzen, startet es für dieses Team, aber ich kann immer noch die URL ändern, um zwischen den Teams zu wechseln (während ich nur das ausgewählte Team sehen sollte)Django Zugriff auf bestimmte Objekte zu beschränken

Die URL sieht wie folgt: http://127.0.0.1:8000/team/1/player/, wobei 1 wäre das erste erstellte Team, das test ist.

Wenn ich die Ansicht lade, möchte ich einige Berechtigungsprüfungen durchführen, um festzustellen, ob das Team der aktuellen Ansicht mit dem Team in der Konfiguration übereinstimmt. Diese

ist der 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) 

Antwort

1

Sie können tun, dass in get Verfahren zu blockieren/erlauben Zugang:

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) 
+0

Arbeitete! Tweaked es ein wenig, aber danke für diese Antwort – dnsko

Verwandte Themen