Help us understand the problem. What is going on with this article?

Djangoでモジュールを複数ファイルで構成する

More than 3 years have passed since last update.

タイトルの用語とかが正しいのかはたいへん疑問。。。。。。

自分向けの備忘録

目的

Djangoを利用したプログラムを作成する際に、
アプリケーションの規模が大きくなった際に都合が良いように、
ビューやモデルなどのモジュール?を複数ファイルに分割するための手順を整理する。

前提

環境は以下の通り

Ubuntu 16.04
python 3.5.2
django 1.10.5

手順

ここではmodels.pyを複数ファイルに分割してみる。

modelを複数ファイルに分割

初期状態
__init__.py
admin.py
apps.py
migrations
models.py
tests.py
views.py

ここではmodels.pyを1ファイル=1モデルクラスとできるように修正する。

modelsディレクトリと__init__.pyファイルを準備
__init__.py
admin.py
apps.py
migrations
models
    __init__.py
    task.py
tests.py
views.py

上のコードのようにmodels.pyを削除しmodelsディレクトリを準備し、
その中に__init.py__ファイルとモデルクラスを記述したファイル
(ここでは、task.py)を作成する。

task.py
from django.db import models


class Task(models.Model):
    """
    Task to do.
    """
    name = models.CharField(max_length=30)
    startTime = models.DateTimeField()
    endTime = models.DateTimeField()
    memo = models.CharField(max_length=200)
__init__pyファイル
from webui.models.task import Task # 上で作成したクラスをインポートする

viewを複数ファイルに分割

ファイルの分割方法は同じ。
1. views.pyを削除
2. viewsディレクトリを作成
3. viewsディレクトリ配下に適当なファイルを作成
3. views/__init__.pyファイルを作成
4. __init__.pyファイルで3.で作ったファイル内のクラス、メソッドをインポート
 

ファイル分割
__init__.py
admin.py
apps.py
migrations
models
    __init__.py
    task.py
tests.py
views
    __init__.py
    task_view.py

urls.pyへの記述

viewモジュールについてはurls.pyへの記述が必要となる

メソッドベースでビューを定義している場合

viewsを複数ファイルに分ける
のようにしている場合は以下の通り

urls.py(メソッドベース)
urlpatterns = [
    ...,
    url(r'^適当な正規表現', アプリケーション名.views.ファイル名.メソッド名)
]

from ... importで指定する方法も本項の冒頭に上げたリンク先では
記述しているけれども、同じメソッド名が指定できなくなるので上のコード例を
用いたほうが多分良いと思う。

クラスベースでビューを定義している場合

Django の views.py をクラスにする にあるようにクラス単位の場合は
以下のようになる。

urls.py(クラスベース)
urlpatterns = [
    ...
    url(r'^/URLの正規表現/$', アプリケーション名.views.viewのクラス名.as_view()),
    ...
]

こちらもメソッドベースの場合と同様にfrom ... importを宣言することで
パッケージ名の記述は不要になるはず。

参考資料

Django の views.py をクラスにする
viewsを複数ファイルに分ける

RyoMa_0923
インフラエンジニア? 記事の内容、およびそのなかで述べられている見解は個人のものであり、所属組織とは関係ありません。また、記事内容の正しさは必ずしも保証されるものではありません。
https://note.com/ryoma_0923
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした