【Python/DjangoRestFramework】共通部分の設定について
DjangoRestFrameworkで1アプリ構成でベースとなるサービスを作成。
その後にアプリ(URL)を増やして、かつDBもアプリ毎にスキーマを切り替えて各種お店へのサービスを展開していくといった要件の元ベースのアプリを作成しようとして、色々とDjangoRestFrameworkの共通部分に触れて考慮することも多かったのでメモとして残しておきます。
目次
1. 今回やりたかったこと
2. フォルダ構成/URL設定について
3. アプリ毎に使用するスキーマを切り替える方法
4. ログ設定について
5. 汎用エラーの設定について
1. 今回やりたかったこと
今回やりたかったこと(要件)についてはざっくり以下のような形となっていて、下記を実現するために1アプリ毎の構成でDBやログ等の共通部分に関してもアプリ毎に切り替えられるように色々考慮して進めていました。
【要件】
・色々なお店へ展開できるベースとなるアプリの作成
・各お店に展開する時はカスタマイズが入る可能性が高い
・各お店毎にバックアップ/リストアの関係もありのDBはスキーマ別で管理したい
・お店毎に資産は分けたい/サーバーは同じにしたい
Django関連のベストプラクティス記事等も拝見していたのですが、基本的にはDjangoではアプリはどちらかというと機能的なところで分かれて、こういった要件の場合にはプロジェクトが分かれる形になっているのかなといった印象でした。
なので今回は少し特殊ケース?になるのかなと思います。
2. フォルダ構成/URL設定について
アプリ毎に資産を分けるとのことでフォルダ構成としては以下のような構成で進めていました。
3. アプリ毎にスキーマを切り替える方法
アプリが増えたときは単純に設定ファイル内のDB設定を増やして、default以外でDB設定に追加した接続先を使用する場合はORMでは以下のような形で切り替えれるようなので、こちらで対応するようにしました。
【設定ファイル】
【ORMでの接続先指定】
4. ログ設定について
ログに関してもアプリ毎に切り替えるために、以下のような形で設定しました。
ログに関しては Djangoのロギングの仕組みをそのまま使いたかったので、プロジェクト自体の設定依存になるんですが、
ロガーの設定をアプリが増える毎に追加(展開)できるようにしてベースを作るようにしました。
5. 汎用エラーの設定について
エラー処理もアプリ毎で切り替えれるように、設定ファイルと繋がるカスタムエラーハンドラの方で
URLによってどのアプリのAPIカスタムエラーを見にいくかをマッピングさせるようにしました。