私の Django アプリケーションの各ユーザーは部門に関連付けられており、事実上すべての要求には部門関連の処理が含まれます。したがって、アプリケーション全体で部門オブジェクトを利用できるようにしたいと考えています。
これらのうち、取るべき最も適切なアプローチはどれですか?
request
関連する部門を DB から取得し、オブジェクトにrequest.department
アタッチするカスタムAuthenticationMiddleware
ミドルウェアrequest.user
。(たとえば、こことここを参照)- ユーザーのログイン時に部門をセッションに配置し、その後 Django の
request.session
インターフェースを使用してビューで取得します。
私はまだ Django のキャッシング機能に慣れる機会がありませんでしたが、最終的にはユーザーごとに部門をキャッシュして、リクエストごとに余分な DB ヒットを回避したいと考えています。Django のセッションには、組み込みのキャッシング サポートが用意されているようです。また、最初のアプローチでもキャッシングを実装できると思います。
このような場合、カスタム ミドルウェア (上記の #1) よりもセッション (上記の #2) を使用する利点はありますか? ミドルウェアのアプローチは、内部 API の観点からはよりクリーンに見えますが、これはまさにセッションが設計されている種類のものであると推測しています。
ご指導ありがとうございます。