この記事ではDjangoでViewを定義してみます。
HTTPリクエストを受け取って、シンプルなレスポンスを返すアプリケーションを作ります。
作業内容は以下の通りです。
- Djangoプロジェクトを作成する
- Djangoアプリを作成する
- ビューを定義する
- URLのパスを定義する
- アプリを表示させる
順番にやっていきましょう。
Djangoをインストールする
基本的には前回の記事と同じ手順です。
pipenvを使ってDjangoプロジェクトを作成する
はじめに、プロジェクト用のディレクトリを作成します。
mkdir helloworld; cd helloworld
仮想環境にDjangoをインストールします。
pipenv install django==3.0.2
次に仮想環境をアクティベートします。
pipenv shell
Djangoプロジェクトを作成する
Djangoプロジェクトを作成します。
以下のコマンドを実行してください。
django-admin startproject helloworld .
上記のコマンドを実行すると、以下のようなフォルダができます。
tree .
.
├── Pipfile
├── Pipfile.lock
├── helloworld
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
各ファイルの意味は以下の通りです。
manage.py | Django プロジェクトに対する様々な操作を行うためのコマンドラインユーティリティを定義している |
settings.py | Djangoプロジェクトの設定ファイル |
urls.py | URLリクエストに対してどのページを返すかを定義する |
wsgi.py | Web Server Gateway Interfaceの意味で、WebサーバとWebアプリケーションを接続するための、標準化されたインタフェース定義を記載している |
この段階でpython manage.py runserver
を実行してみましょう。
すると、以下のようにDjangoアプリの初期ページが表示されます。
You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
この警告を表示させないためには、マイグレーションコマンドを実行する必要があります。
一度CONTROL-Cでサーバーをストップして、下記のコマンドを実行してください。
python manage.py migrate
マイグレーション実行後に再度サーバーを起動すると、今度は警告なしで稼働します。
% python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
March 23, 2020 - 05:55:28
Django version 3.0.2, using settings 'helloworld.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Djangoアプリを作成する
Djangoのアプリケーションとは、何かを行う一つの機能の集合体です。
一つのDjangoプロジェクトには複数のアプリケーションを内包させることができます。
下はe-commerceプロジェクトの中にpayments(決済)やauthentication(認証)のアプリが含まれるイメージです。
ここでは画面の「Hello World」と表示させる機能を持つ「web」というアプリケーションを作成してみます。
python manage.py startapp web
上記のコマンドを実行すると、以下のようなファイル・ディレクトリが作成されます。
└── web
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
それぞれのファイルの意味は以下のとおりです。
admin.py | 管理者用の設定ファイル |
settings.py | Djangoプロジェクトの設定ファイル |
apps.py | アプリケーションの設定ファイル。アプリケーションを作るたびに作成される |
migrations/ | データベースとmodel.pyを同期させるためにmodel.pyファイルの変更を記録する |
model.py | モデルを定義する。models.pyの内容は自動でデータベースのテーブルに変換される |
tests.py | テスト用のファイル |
views.py | リクエスト・レスポンスを扱う |
Djangoプロジェクトにアプリケーションを登録する
python manage.py startapp web
で「web」というアプリケーションを作成しました。
ここで作成したアプリケーションをDjangoに登録します。
そのためには、helloworld/settings.py
ファイルにweb.apps.WebConfig
を定義しなければいけません。
開くファイルsettings.py
は下記です。
登録するweb.apps
は以下です。
helloworld/settings.py
のINSTALLED_APPS
を修正します。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'web.apps.WebConfig', # 追記したもの
]
DjangoのINSTALLED_APPS
は上から順に反映されるので、新しく追加したアプリケーションは一番下に追記してください。
ビューを定義する
Djangoでウェブページを表示するためには、以下の3つのファイルを編集する必要があります。
- urls.py
- views.py
- models.py
HTTPリクエストを受けた時、DjangoはURLにマッチするURLpattern
を探します。
URLpatternにはviewが定義されていて、URLにマッチしたビューを表示させようとします。
ビューにはモデルとテンプレートが定義されています。
URL→View→Model→Template
の順にリクエストがさばかれていって、その結果をHTTPレスポンスとして返します。
実際にサンプルを作って確認していきましょう。
web/views.py
を編集します。
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def homePageView(request):
return HttpResponse('Hello World!')
これでビューの作成は完了です。
次に「web」アプリケーションのURLパターンを定義します。
web/urls.py
を作成しましょう。
web/urls.py
には以下のコードを書きます。
from django.urls import path
from .views import homePageView #views.pyを参照している
urlpatterns = [
path('', homePageView, name='home')
]
上記のurlpatterns
では、HTTPリクエストが投げられたURLが”(空)、すなわち、http://sample.com
のように、sample.com
以下に何もついていないときにhomePageView
を開きましょう、ということです。
ここでは「web」アプリケーションのURLpatternを定義したので、次にDjangoプロジェクトが「web」アプリケーションで定義したURLを読み込むようにします。
helloworld/urls.py
を開きましょう。
これが(「web」アプリではなく)DjangoプロジェクトのURLpatternを定義したファイルです。
ここに「web」アプリで定義したurls.pyを読み込むように設定します。
helloworld/urls.py
を以下のように編集してください。
"""helloworld URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include # 追記したもの
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('web.urls')), # 追記したもの
]
これでユーザーがホームページ(例:http://sample.com
)にアクセスすると、web/urls.py
に設定されたhomePageView
を開くようになります。
いま編集したhelloworld/urls.py
は各アプリケーションのURLpatternのゲートウェイとして機能します。
ここでサーバーを起動してみましょう。
python manage.py runserver
ブラウザに「hello world」と表示されます。
コメントを残す