Я работаю над большим приложением Django, для доступа к большинству из которого требуется логин. Это означает, что мы разбросали по всему нашему приложению:
@login_required
def view(...):
Это нормально и отлично работает, если мы не забываем добавлять его везде ! К сожалению, иногда мы забываем, и неудача часто не так очевидна. Если единственная ссылка на представление находится на странице @login_required, то вы вряд ли заметите, что действительно можете достичь этого представления без входа в систему. Но злоумышленники могут заметить, что является проблемой.
Моя идея заключалась в том, чтобы полностью изменить систему. Вместо того, чтобы набирать везде @login_required, у меня было бы что-то вроде:
@public
def public_view(...):
Просто для публики. Я попытался реализовать это с помощью некоторого промежуточного программного обеспечения, и у меня не получалось заставить его работать. Я думаю, все, что я пробовал, плохо взаимодействовало с другим промежуточным программным обеспечением, которое мы используем. Затем я попытался написать что-нибудь для обхода шаблонов URL, чтобы проверить, что все, кроме @public, было помечено как @login_required - по крайней мере, тогда мы получим быструю ошибку, если бы что-то забыли. Но тогда я не мог понять, как определить, применен ли @login_required к представлению ...
Итак, как правильно это сделать? Спасибо за помощь!