プログラミングの定番、「hello world」をしてみたいと思います。
アプリケーションを作る
Djangoでは、プロジェクトとアプリケーションという概念があります。
プロジェクト=サイト、アプリケーション=ページという認識でとりあえず問題ないと思います。
※アプリケーションの中にはAPIのみを提供するものもあり、ページを伴わないケースもあります。
セットアップ後のフォルダ構成は以下のようになっていると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
├── Makefile ├── backend // Django開発環境 │ ├── Dockerfile // backend環境構築用実行ファイル │ ├── django │ │ ├── manage.py │ │ └── mysite // プロジェクトフォルダ │ │ ├── __init__.py │ │ ├── __pycache__ // pythonコードのキャッシュフォルダ │ │ ├── settings.py // Django設定ファイル │ │ ├── urls.py // URL設定ファイル │ │ └── wsgi.py │ ├── requirements.txt // Pythonパッケージの管理テキストファイル │ └── static │ └── admin // 管理サイト「http://localhost:8000/」に関わるファイル群 │ . │ . ├── db │ └── Dockerfile // db環境構築用実行ファイル ├── docker-compose.yml // 全環境構築用設定ファイル ├── frontend // Nuxt.js開発環境 │ . │ . └── nginx // Webサーバー設定ファイル ├── conf │ └── mysite_nginx.conf └── uwsgi_params |
以下のコマンドを叩いて「home」 アプリケーションを作ります。
1 |
docker-compose exec django python manage.py startapp home |
djangoフォルダ内に「home」フォルダが作られました。
1 2 3 4 5 6 7 8 9 |
home ├── __init__.py ├── admin.py // 管理サイトに登録する際に設定する ├── apps.py ├── migrations │ └── __init__.py ├── models.py // データの仕様を決定したり振る舞いを決める。MTVのM ├── tests.py └── views.py // データを要求してテンプレートに渡す。MTVのV |
それでは、homeアプリケーションにインデックスページを作成して、DjangoのMTVとはどういうものなのか見ていきたいと思います。
モデル(M)
今回は簡略化するためにモデルは作成しません。
ビュー(V)
homeアプリケーションに到達させるためにURLを設定します。
・home/urls.pyの作成
1 2 3 4 5 6 7 |
from django.conf.urls import url from .views import IndexView app_name = 'home' urlpatterns = [ url(r'^$', IndexView.as_view(), name="index"), ] |
・home/views.pyの改修
1 2 3 4 5 6 7 8 9 10 |
from django.views.generic import TemplateView # DjangoのTemplateViewクラスを継承して独自の属性を追加する class IndexView(TemplateView): template_name = 'home/index.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['text'] = 'Hello World!! my first django application' return context |
プロジェクトへのhomeアプリケーションの登録
・mysite/settings.pyへの登録
1 2 3 4 5 6 7 8 9 |
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'home', # ←追加 ] |
・mysite/urls.py(プロジェクトURL)への登録
1 2 3 4 5 6 7 8 9 |
from django.contrib import admin from django.urls import path from django.conf.urls import include, url # ←追加 # ルーティング urlpatterns = [ path('admin/', admin.site.urls), url(r'', include('home.urls')), # ←追加 ] |
この段階でDjangoをリスタートしてみます。
1 |
make restart_django |
以下のようなエラー画面になりました。
「home/index.html」というテンプレートファイルがないというエラーです。表示用のテンプレートを用意していないので想定どおりです。
Djangoのエラー画面はとても見やすくて、エラーの原因を特定しやすいです。
続いて、テンプレートを作っていきます。
テンプレート(T)
MTVのTにあたるテンプレートを作って「hello world」を表示します。
・home/templates/home/index.htmlの作成
1 2 3 4 5 6 7 8 9 10 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>hello World!!</title> </head> <body> <h1>{{text}}</h1> </body> </html> |
リロードしてみると
ビューで設定したtext「Hello World!! my first django application」が
index.htmlで「{{text}}」として出力されて、無事表示されましたね。
これがDjangoの基本的なアプリケーション作成の流れになります。
最初にDjangoでアプリケーションを作ったとき、あまりの簡単さに驚きました。