Ich möchte den Zugriff auf URLs beschränken, die von Django Generic Views verarbeitet werden.
Für meine Ansichten weiß ich, dass der login_required
Dekorateur den Job macht. Auch generische Ansichten erstellen / löschen / aktualisieren übernehmen das login_required
Argument, aber ich konnte keine Möglichkeit finden, dies für andere generische Ansichten zu tun.
Django 1.9 oder mit Django-Klammern
Django 1.9 hat ein LoginRequiredMixin eingeführt , das folgendermaßen verwendet wird:
Wenn Sie eine ältere Version von Django verwenden, können Sie fast das gleiche Mixin von Django-Klammern verwenden - die Django-Version basierte auf der Django-Klammer-Version. django-braces 1.4.x unterstützt weiterhin Django 1.4, sodass Sie es mit ziemlich alten Versionen verwenden können.
Ältere Methoden
Ich habe diese Frage gefunden, als ich gegoogelt habe, wie klassenbasierte Ansichten dekoriert werden sollen, um die Antwort darauf hinzuzufügen:
Dies wird im Dokumentationsabschnitt zum Dekorieren klassenbasierter Ansichten behandelt . Es gibt den
urls.py
Wrapper, oder Sie können den Dekorator auf diedispatch()
Methode anwenden . Beispiele aus der Dokumentation:Dekorieren in URL conf
Die Klasse dekorieren
Weitere Informationen finden Sie in der oben verlinkten Dokumentation.
quelle
def dispatch
Methode als Unterklasse von gemachtView
. Jetzt kann ich einfach so etwas machen:class ProtectedTemplateView(TemplateView, ProtectedView): pass
Die generischen Ansichten wurden von Funktionen zu Objekten mit Version 1.3 von Django geändert. Daher ist eine geringfügige Änderung erforderlich, damit die Antworten von Will McCutchen und Will Hardy mit Version 1.3 funktionieren:
In der Dokumentation wird auch beschrieben, wie dies ebenfalls funktioniert.
quelle
Wenn Sie keinen eigenen Thin Wrapper um die betreffenden generischen Ansichten schreiben möchten (wie von Aamir vorgeschlagen), können Sie in Ihrer
urls.py
Datei auch Folgendes tun :quelle
Für Django 1.11 können Sie LoginRequiredMixin für klassenbasierte Ansichten verwenden
in der Einstellungsdatei sollten Sie hinzufügen
in Ihren views.py
quelle
Eine andere Möglichkeit, dies zu erreichen, ist unten aufgeführt. Ich finde es sehr ähnlich wie bei funktionsbasierten Ansichten und erfordert keine Änderung
urls.py
oder Überschreibungdispatch
:quelle
Ich wollte eine wiederverwendbare Methode, um die Authentifizierung für viele Ansichten zu erfordern, die von generischen Ansichten abgeleitet sind. Ich habe eine Ersatzversandfunktion erstellt, die ich wie andere Deklarationen zu meiner Ansichtsklasse hinzufügen kann.
In auth.dispatch erledigen wir die Arbeit:
quelle
In Django => 3.0 wird es ziemlich einfach:
als Referenz: https://docs.djangoproject.com/de/3.0/topics/class-based-views/intro/#decorating-the-class
quelle
Verwenden Sie Folgendes:
quelle
Das Folgende könnte dieses Problem lösen.
quelle