Ich arbeite an einer großen Django-App, für deren Zugriff zum größten Teil ein Login erforderlich ist. Dies bedeutet, dass wir in unserer gesamten App Folgendes verteilt haben:
@login_required
def view(...):
Das ist in Ordnung und funktioniert hervorragend , solange wir daran denken, es überall hinzuzufügen ! Leider vergessen wir manchmal, und der Fehler ist oft nicht besonders offensichtlich. Wenn sich der einzige Link zu einer Ansicht auf einer @ login_required-Seite befindet, werden Sie wahrscheinlich nicht bemerken, dass Sie diese Ansicht tatsächlich erreichen können, ohne sich anzumelden. Aber die Bösen bemerken möglicherweise, was ein Problem ist.
Meine Idee war es, das System umzukehren. Anstatt überall @login_required eingeben zu müssen, hätte ich stattdessen etwas wie:
@public
def public_view(...):
Nur für die Öffentlichkeit. Ich habe versucht, dies mit Middleware zu implementieren, und ich konnte es anscheinend nicht zum Laufen bringen. Alles, was ich versucht habe, hat schlecht mit anderer Middleware interagiert, die wir verwenden, denke ich. Als nächstes habe ich versucht, etwas zu schreiben, um die URL-Muster zu durchlaufen, um zu überprüfen, ob alles, was nicht @public ist, als @login_required markiert ist - zumindest dann würden wir einen schnellen Fehler erhalten, wenn wir etwas vergessen. Aber dann konnte ich nicht herausfinden, ob @login_required auf eine Ansicht angewendet wurde ...
Also, was ist der richtige Weg, um dies zu tun? Danke für die Hilfe!