Il modo migliore per rendere login_required di Django come predefinito

| | | |

Sto lavorando a un'app Django di grandi dimensioni, la stragrande maggioranza delle quali richiede un login per accedere. Ciò significa che in tutta la nostra app abbiamo spruzzato:

@login_required def view (...): 

Va bene e funziona alla grande purché ci ricordiamo di aggiungerlo ovunque! Purtroppo a volte dimentichiamo e il il fallimento spesso non è molto evidente. Se l'unico collegamento a una vista è su una pagina @login_required, è improbabile che ti accorga che puoi effettivamente raggiungere quella vista senza effettuare l'accesso. Ma i malintenzionati potrebbero notarlo, il che è un problema.

La mia idea era di invertire il sistema. Invece di dover digitare @login_required ovunque, avrei invece qualcosa del tipo:

@public def public_view(...):  

Solo per le cose pubbliche. Ho provato a implementarlo con alcuni middleware e non riuscivo a farlo funzionare. Tutto ciò che ho provato ha interagito male con altri middleware che stiamo usando, credo. Successivamente ho provato a scrivere qualcosa per attraversare i modelli URL per verificare che tutto ciò che non è @pubblico fosse contrassegnato con @login_required - almeno allora avremmo ricevuto un rapido errore se avessimo dimenticato qualcosa. Ma poi non riuscivo a capire come capire se @login_required fosse stato applicato a una vista...

Quindi, qual è il modo giusto per farlo? Grazie per l'aiuto!