20
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

django開発で肥大化したview.py を複数ファイルに分割する方法

Posted at

Djangoフレームワークを使って開発する中で、得た知見やクリティカルな情報が見つからなかったものを小ネタ的に書きます。

環境

  • Python:3.7.2
  • django:2.1.5

課題

djangoを用いたWebアプリケーション開発をしていくなかで、1つのview.pyに複数画面の処理(3,4画面ぐらい)を詰め込んだくらいから単純に、
 -コード全体が読みづらい
 -複数画面の処理が書かれているので、機能追加がしづらい
などの問題が出たので「view.pyを複数ファイル分割して管理しよう」という方針を取りました。

構成イメージ

【実施前のフォルダ構成】
djangoプロジェクトの自動作成デフォルトの構成

プロジェクト名
├ config .. 設定ファイルを管理するディレクトリ
├ static .. 静的ファイルを管理するディレクトリ
└ application .. アプリケーション関連ファイルを管理するディレクトリ
  ├ __init__.py
  ├ admin.py
  ├ apps.py
  ├ models.py
  ├ tests.py
  ├ urls.py
  └ views.py

【実施後のフォルダ構成】
viewディレクトリを作成し、その配下に機能単位にPythonファイルを作成する。

プロジェクト名
├ config .. 設定ファイルを管理するディレクトリ
├ static .. 静的ファイルを管理するディレクトリ
└ application .. アプリケーション関連ファイルを管理するディレクトリ
  ├ __init__.py
  ├ admin.py
  ├ apps.py
  ├ models.py
  ├ tests.py
  ├ urls.py
  └ views★ .. 本記事の箇所。views.pyを分割したファイルを格納
   ├ __init__.py
   ├ func1.py
   ├ func2.py
   └ func3.py

対処ステップ1. viewsディレクトリの作成

分割したPythonファイルを格納・管理するためのディレクトリをapplication直下に作成します。

対処ステップ2. viewsフォルダに__init__.pyを作成

viewsディレクトリに、__init__.pyを作成します。
とりあえずファイル分割をするのであれば、空の__init__.pyを作成して大丈夫です。

対処ステップ3.views.pyファイルを分割

view.pyを定義した単位で分割し、新規ファイルを作成します。私は以下のルールで管理しました。(一例です)

  • 「画面単位」に処理を分割
  • 例えば、「ログイン画面」があった場合、login.pyというファイルを作成し、ログイン画面に関連する処理を集約
  • 複数画面で使われる処理は、共通処理として分割

対処ステップ4.呼び出されている設定ファイルの修正

例えば、「urls.pyの画面遷移の呼び出し先の変更」など、ファイル分割に伴う指定変更などあれば対処します。
urls.pyには以下のように書けば呼び出せます。

from .views import func1
from .views import func2
from .views import func3

urlpatterns = [
    path('', funct1.[クラス/関数名], name='[任意の文字列]'),
    path('/view2', funct2.[クラス/関数名], name='[任意の文字列]'),
    path('/view3', funct3.[クラス/関数名], name='[任意の文字列]')
]

参考文献

Python __init__.pyの書き方

20
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?