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