D-policy

To live as I please, and die by my own rules.

Django

【Django】わかりやすいプロジェクト構成にする

投稿日:2018年9月30日 更新日:

Djangoプロジェクト構成の問題点

公式のDjangoチュートリアルで紹介されているプロジェクト構成には以下の問題点があると思っています。Djangoでの開発に慣れた方であれば気にならない問題なのですが、フレームワークはRailsしか触ったことのなかった私にとってはそうではありませんでした・・・。

  • ベースディレクトリの名前と設定ディレクトリの名前が同じでややこしい
  • htmlやjsといったテンプレート及び静的ファイルがアプリケーション毎にバラバラに配置されてします

ベストプラクティス

ハンズオン形式で順番にDjangoプロジェクトを立ち上げていきましょう。

仮想環境を作成する

今回はvenvによって仮想環境を使用します。まずはENVという名前の仮想環境を作っていきましょう。基本的に上記のとおりにコマンドを叩いていけばOKです。

仮想環境の概念と利用方法については別記事で紹介しているため、ここでの説明は省きます。

Djangoをインストールする

仮想環境を作成し、その仮想環境に入れたらDjangoをインストールしていきましょう。ご多分に漏れずpipコマンドを使ってインストールしていきます。

ベースディレクトリ名と設定ディレクトリ名を別にする

settings.pyやurls.pyがconfig直下に作成さます。「config」というディレクトリ名はひと目で「あ、これは設定ディレクトリだな」と誰でも推測がつきますね。ちなみに設定ディレクトリの名前は何にしても問題ありません。defaultやrootなど、なんでも大丈夫です。

記事の冒頭で上げた問題点の一つがこれで解消されました。

settings.pyを修正する

次に、テンプレートファイルと静的ファイルを保持する場所をまとめていきます。前項で作成したconfigと同じ階層、つまりベースディレクトリ直下にまとめて配置することによって将来的なメンテナビリティを確保していきましょう。

以下、setting.pyの該当箇所を修正していきます。

これで準備が整いました。

ベースディレクトリ直下にtemplatesディレクトリとstaticディレクトリを作成しましょう。

出来上がったDjangoプロジェクトの構成

設定、アプリケーション、静的ファイル、テンプレートファイルと、用途や機能に合わせてディレクトリ構成を最適化することができました。

仮にこのDjangoプロジェクトが自分の手を離れたとしても、READMEに上記のディレクトリ構成にした旨とその意図を記録しておけば、将来的に難解な構成にならないのではないでしょうか。

 

-Django

執筆者:


  1. […] 【Django】わかりやすいプロジェクト構成にする […]

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

【Python】辞書型リストから値を取り出す

目的 Pythonコードで辞書型のリストから、特定のキーの値を取り出すことを目的としています。これは非常に稀で限られたケースですが、私はこの値を取り出すことができずに2時間ほど苦しんだため、ここに方法 …

【Django2.0】ユーザー登録機能を実装する

はじめに みんな大好きRuby on Railsではdeviseというgemによって、非常にお手軽なユーザー登録機能を実装することができます。 Djangoでもそんなお手軽なライブラリがないものかと探 …

【例外ハンドリング】潜在的バグに注意する

モデルが日付を持つ場合 下記のようなValidatorを考える。 たとえばモデルが締め切りや有効期限など、未来の日付を情報として保持することが期待されているとき。もちろん、上記のvalidate_ex …

30分でDjangoをDocker上に起動する

TL; DR DjangoをDocker+PostgreSQLな環境で起動する Docker自体の説明は省略 localhost:8000にアクセスしてDjangoが見えるところがゴール   …

Djangoの管理画面に独自のURLとViewを追加する

Djangoには優れた管理画面が備わっています。Djangoプロジェクトを作成するだけで、モデルをベースにしたオブジェクトを簡単にCRUDすることができるので非常に便利です。 今回、クライアントの要望 …

Darylです。

頭の中の思考を整理する目的でゆるーくブログを更新しています。

普段は東京の受託開発会社にてフルリモートで働いています。主にGoやPythonを使い、AWS環境で動作するシステムを扱っています。

AWS Certified Solution Architect – Associate