私は大規模なDjangoアプリに取り組んでいます。その大部分は、アクセスするためにログインが必要です。これは、アプリ全体に散りばめたことを意味します。
@login_required
def view(...):
それは問題なく、どこにでも追加することを覚えている限り、うまく機能します!悲しいことに時々私たちは忘れてしまいます、そしてその失敗はしばしばひどく明白ではありません。ビューへの唯一のリンクが@login_requiredページにある場合は、ログインせずにそのビューに実際にアクセスできることに気付かない可能性があります。しかし、悪意のある人が気づく可能性があり、これが問題です。
私の考えはシステムを逆にすることでした。どこでも@login_requiredと入力する代わりに、次のようなものを使用します。
@public
def public_view(...):
ただ公共のもののために。私はこれをいくつかのミドルウェアで実装しようとしましたが、動作させることができませんでした。私が試したものはすべて、私たちが使用している他のミドルウェアとうまく相互作用しなかったと思います。次に、URLパターンをトラバースする何かを記述して、@ public以外のすべてが@login_requiredとマークされていることを確認しました。少なくとも、何かを忘れた場合は簡単なエラーが発生します。しかし、@ login_requiredがビューに適用されているかどうかを確認する方法を理解できませんでした...
それで、これを行う正しい方法は何ですか?助けてくれてありがとう!