Estoy trabajando en una gran aplicación de Django, la gran mayoría de las cuales requiere un inicio de sesión para acceder. Esto significa que en toda nuestra aplicación hemos rociado:
@login_required
def view(...):
Está bien y funciona muy bien siempre que recordemos agregarlo en todas partes . Lamentablemente, a veces lo olvidamos, y el fracaso a menudo no es tan evidente. Si el único enlace a una vista está en una página @login_required, entonces no es probable que notes que puedes llegar a esa vista sin iniciar sesión. Pero los malos pueden notarlo, lo cual es un problema.
Mi idea era revertir el sistema. En lugar de tener que escribir @login_required en todas partes, tendría algo como:
@public
def public_view(...):
Solo para las cosas públicas. Intenté implementar esto con algo de middleware y parecía que no podía hacerlo funcionar. Todo lo que probé interactuó mal con otros middleware que estamos usando, creo. A continuación, intenté escribir algo para recorrer los patrones de URL para comprobar que todo lo que no es @public estaba marcado como @login_required; al menos, obtendríamos un error rápido si olvidábamos algo. Pero luego no pude averiguar cómo saber si @login_required se había aplicado a una vista ...
Entonces, ¿cuál es la forma correcta de hacer esto? ¡Gracias por la ayuda!