Django アプリケーションの作成

ひとつの Django プロジェクト内には複数の Django アプリケーションを作成できます。

Django プロジェクトの作成方法については、「Django プロジェクトの作成」をみてください。

この記事は Python3.6 + Django 1.11.11 (LTS) に基づいています。

次のコマンドで、Django アプリケーションを作成できます。

$ django-admin startapp <アプリケーション名>

具体例として、venv という Virtualenv 環境内にて、myapp1 という Django アプリケーションを作成するなら次のようなコマンドになります。

$ source venv/bin/activate
(venv) $ django-admin startapp myapp1

この結果次のファイルが作成されます。

  • manage.py Django プロジェクトの管理用スクリプト
  • myapp1/__init__.py Python がこのディレクトリをパッケージとみなすためのファイル
  • myapp1/admin.py 管理ファイル
  • myapp1/apps.py アプリケーション設定ファイル
  • myapp1/models.py データベース定義
  • myapp1/tests.py テストコードを書くところ
  • myapp1/views.py ビュー

詳細については、それぞれ利用するときに説明します。

さて、この 「Web アプリケーション」ですが、プロジェクト内に作成しただけではプロジェクトと何の繋がりもありません。

プロジェクトとの繋がりを設定する必要があります。

これは一見、不親切に見えるかもしれませんが、コードのポータブル性という観点からは悪くありません。ポータブルなコードはすなわち、再利用性が高くなります。

Django プロジェクトの作成」で開発サーバーを起動したときは、 URL http://127.0.0.1:8000/ で動作確認しましたが、 今回は http://127.0.0.1:8000/myapp1/ としたときに、myapp1 アプリケーション内から応答を返してみましょう。

尚、前提としてプロジェクト名を myproj、アプリケーション名を myapp1 として、 およそ次のようなディレクトリ構成になっていることを想定しています。

$ tree -I venv* .
.
├── db.sqlite3
├── manage.py
├── myapp1
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── myprj
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

URL の設定

ディレクトリ myapp1 内に、次の内容でファイル urls.py を作成します。

from django.conf.urls import url
from . import views

urlpatterns = [
    url('', views.index, name='index'),
]

これを myprj/urls.py から取り込みます。

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url('myapp1/', include('myapp1.urls')),
    url(r'^admin/', admin.site.urls),
]

このように URL の設定丸ごと取り込む仕組みがあるので、 myapp1 アプリケーションに関わる URL については、 myprj ディレクトリ内の urls.py に直接 URL を記述するのではなく、 myapp1 ディレクトリ内の urls.py に記述しておくことができます。

簡単なビューの作成

myapp1/views.py を次のように編集します。

from django.http import HttpResponse

def index(request):
    return HttpResponse('<h1>Hello, myapp1!</h1>')

ちなみに、これが上で作成した urls.py 内の url 関数内から参照されています。

動作確認

さて、これで準備完了です。動作確認しましょう。次のコマンドで開発サーバーを起動します。

$ python manage.py runserver
...
Django version 1.11.11, using settings 'myprj.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

ブラウザを開き http://127.0.0.1:8000/myapp1/ にアクセスして、次のように表示されれば OK です。

Django access with browser

myprj/urls.py 内の url('myapp1/', include('myapp1.urls')) 'myapp1' の部分が、 このアプリケーションに対するルートパスになっています。

また、上記の設定では http://127.0.0.1:8000/myapp1/aaaaa などとしても同じ画面が表示されます。

myapp1/urls.py を次のように変更すると、URL をより厳密に制御できます。

from django.conf.urls import url
from . import views

urlpatterns = [
    url('^$', views.index, name='index'),
]

url 関数の第一引数は 正規表現のパターンを書きます。

これをテンプレートを使うように書き換えるには、次のページをみてください。

テンプレートを利用したページ

今回のテストではこれで OK ですが、実際には作成したアプリケーションは Django プロジェクトに登録して使います。 引き続き 「Django アプリケーションの登録」を参考にアプリケーションを登録してください。

以上、Django アプリケーションを作成して、簡単なビューの作成と、URL の設定を行い、正しく動作することを確認しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門