前回作成したプロジェクトにアプリケーションを追加していきます。
プロジェクトにアプリケーションを追加する
アプリケーションの追加
Djangoではプロジェクトという単位の中にアプリケーションという単位で機能を追加していきます。
「アプリケーション」というものをどのような単位で切っていくかということについてはあまり明確になっていないっぽいですね。初学者はそこまで気にしなくてもいいかもしれませんが、以下のような記事が考え方の参考にはなるかもしれません。
アプリケーションの単位 - やさしいデスマーチ
applicationの単位
アプリケーションの追加は手動でフォルダなどを作成しても作れるはずですが、最低限機能させるために必要なファイルもあるので、ターミナルからコマンド実行で作成した方がよいでしょう。
ターミナル上でプロジェクトのフォルダに移動して以下のコマンドを実行します。
python .\manage.py startapp [アプリケーション名]
・実行例
PS C:\Users\wanta\Desktop\dev\django_pj\sample_pj> python .\manage.py startapp hello_app PS C:\Users\wanta\Desktop\dev\django_pj\sample_pj>
アプリケーションの構成確認
アプリケーションを作成すると以下のような構成が出来上がります。
hello_app/ ├ migrations/ │ └ __init__.py ├ __init__.py ├ admin.py ├ apps.py ├ models.py ├ tests.py └ views.py
各ファイルは以下のような役割を担っているようです。
- */__init__.py
上述の__init__.pyと同じ役割です。 こちらは無視で大丈夫です。
- */admin.py
Djangoにはプロジェクトの作成と同時に自動でデータの管理画面が作成されます。この管理画面で表示するデータの設定や機能の追加などをここで行います。ここは管理者画面の立ち位置なので、会員登録機能などで作られるユーザーでは入ることができず、スタッフ権限を持ったユーザーのみがログインして閲覧することができます。
- */apps.py
ここにはappの設定を記述することでその内容をconfigフォルダのsettings.pyで読み込めるようにし、結果的にプロジェクト全体に、該当するappの機能を反映しています。デフォルトですでに必要なコードが記述されてあるのでこちらもほぼ触れることはありません。
- */models.py 重要
前章のMTVフレームワークで触れたM(モデル)の部分であり、DBに登録するテーブルを記述していきます。基本的にはClassベースで記述していき、最終的にmigrateというアクションでデータ構造をデータベースに登録します。
- */tests.py
Djangoのもつユニットテスト機能をこのtests.pyを使用して行うことができます。初めはあまりテストを意識することはないと思うので触れる機会は少ないかもしれませんが、開発を進めていくにつれてこの記述を行っていくことになるでしょう。ここでは開発で使用しているデータベースとは別にダミーのデータベースを立てることができ、それを使用して自分の作った機能がうまく動くかテストすることができます。
- */views.py 重要
前章のMTVフレームワークで触れたV(ビュー)の部分であり、Djangoプロジェクトの中核を担います。主にバックエンドとなるファイルです。このファイルにmodels.pyからClassを読み込んだり、各種パッケージ機能などを読み込んだりしながらhtmlファイルの設定や投げるデータの登録、バックエンドとしての機能を持たせることができます。このファイルを使用することが一番多いでしょう。
- (任意)*/urls.py
一般的なDjangoの開発手法では、自分でurls.pyをappフォルダ内に作成することが多いです。ここにviews.pyで作成したClassまたは関数を読み込んでapp内のルーティングを登録します。
urls.py
については本記事でも扱うので詳しくは後述します。
他にmigrations
というフォルダが存在しますが、データベース接続に関するフォルダのようです。少なくともデータベースに接続しない現時点ではあまり気にしなくてもよいでしょう。
Hello Djangoを表示させるまで
ビューの編集
DjangoはMVCモデルに基づいていますが、MVCモデルのうち単体でも機能するビュー部分を試してみます。
アプリケーションで作成したファイルのうち、その名の通りviews.pyファイルが該当します。
・hello_app/views.py
from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse("Hello Django") def message(request): return HttpResponse("message")
今回は上記のようにシンプルにindex
という関数でレスポンスとして文字列を返すだけです。
URLマッピング
現時点では作成したviews.py
にアクセスする経路がないので、URLマッピングしてあげます。
URLマッピングはurls.py
というファイルで行います。
プロジェクトフォルダの方にurls.py
というファイルがありますが、アプリケーションのURLマッピングはアプリケーションのフォルダ内で完結させるのが主流なようなので、作成したアプリケーションフォルダ(hello_app
)内にurls.py
ファイルを新規作成します。
また仕組み的には、プロジェクトのurls.py
を見てアプリケーションのurls.py
をたどるような感じになるので、プロジェクト配下のファイルも編集する必要があります。
・sample_pj/urls.py
(プロジェクトフォルダ配下)
ここではURLにhello/
がつく場合にはhello_appアプリケーションのurlsを参照するような内容を追記しています。
後からアプリケーションが追加されたら、ここにも追記していく感じですね。
なお、全てを「hello」にするとどこがどの「hello」なのか分かりにくくなるので、ここではアプリケーション名は「hello_app」をとしています。
from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('hello/', include('hello_app.urls')) ]
・hello_app/urls.py
(アプリケーションフォルダ配下)
具体的なURLで言うと、「http://localhost:8000/hello/」の場合はindex
を、「http://localhost:8000/hello/message」の場合はmessage
を呼び出すようにしています。
from django.contrib import admin from django.urls import path from hello_app import views urlpatterns = [ path('', views.index,name='index'), path('message', views.message,name='massage') ]
表示確認
ターミナルからサーバを起動してブラウザで表示を確認します。
起動コマンド
python manage.py runserver
http://localhost:8000/hello/message
ちゃんとURLで出し分けられているので問題なさそうです。
・参考書籍
- 第2章 ビューとテンプレート
- 2-1Webページの基本を覚えよう