Django beschränkt den Zugriff auf die Ansicht für bestimmte Objekte

dnsko

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 1wä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)
Shang Wang

Sie können dies in einer getMethode 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.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

TOP Liste

  1. 1

    So verschieben Sie ein Bild in Flutter/Dart mit einem Draggable

  2. 2

    Unity Build-Fehler: Der Name 'EditorUtility' ist im aktuellen Kontext nicht vorhanden

  3. 3

    TypeAhead.js zeigt keine Ausgangsschienen an?

  4. 4

    Deklarieren einer nicht initialisierten Variablen in der Klassendefinition in Python

  5. 5

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  6. 6

    Interpolieren Sie mit Python die 2D-Matrix entlang der Spalten

  7. 7

    spring-data-jpa: ORA-01795: Die maximale Anzahl von Ausdrücken in einer Liste beträgt 1000

  8. 8

    Warum funktioniert Phantomjs nicht mit dieser Site?

  9. 9

    numpy: Berechnen Sie die Ableitung der Softmax-Funktion

  10. 10

    Wie vermeide ich, dass die gesamte App neu geladen wird, wenn Nav.Link von React-Bootstrap verwendet wird?

  11. 11

    MongoDB eingebettetes Dokument unterscheiden und filtern

  12. 12

    Warum funktioniert das Umgebungslicht in diesem Beispiel nicht?

  13. 13

    Wie aktualisiere ich ein Feld in einer Raumdatenbank mit einem Repository und einem Ansichtsmodell?

  14. 14

    Python gibt einen Fehler aus, dass eine Datei nicht vorhanden ist, wenn dies eindeutig der Fall ist

  15. 15

    Aktualisieren des Werts im Json-Objekt in Python

  16. 16

    Wie verwende ich Format-Table ohne Abschneiden von Werten?

  17. 17

    Kivy: Machen Sie Scatter gleich groß wie das untergeordnete Etikett oder Bild

  18. 18

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  19. 19

    So vergleichen Sie Werte in verschiedenen Objekten jq

  20. 20

    Teilen Sie die Zeichenfolge durch (') und Leerzeichen, aber lassen Sie alle Leerzeichen zwischen zwei aufeinander folgenden (')

  21. 21

    Überprüfen Sie, ob der ausgewählte Wert 'YES' ist, wenn ja, aktivieren Sie ein Steuerelement mit Javascript

heißlabel

Archiv