Djangoメモ(3) : Hello Worldを表示するアプリを作成
A Complete Beginner's Guide to Djangoのチュートリアルを参考にHello Worldを表示するアプリケーションを作成してみる。
アプリケーション作成
前回まででプロジェクトの雛形の作成は完了しているのでアプリケーションを作成する。
Djangoにおけるプロジェクトとアプリケーションの違いは下記。
- アプリケーション:実際に何らかの処理を行う Web アプリケーション
- プロジェクト:あるウェブサイト向けに設定とアプリケーションを集めたもの。一つのプロジェクトには複数のアプリケーションを入れられる。
アプリケーションの雛形はdjango-admin
またはmanage.py
により作成できるのでmanage.py
があるディレクトリに移動して下記コマンドを実行(後で掲示板アプリケーションにするので名前はboards
)。
$ django-admin startapp boards
または
$ python manage.py startapp boards
コマンドを実行すると以下のようにファイルが作成される(__pycache__
を除く)。
myproject ├── boards # startappで作成されるディレクトリ │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── db.sqlite3 ├── manage.py └── myproject ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
django-admin
とmanage.py
の違いはドキュメントによると下記とのこと。
django-admin は Django において管理者権限の処理を行うためのコマンドラインユーティリティです。本項ではその機能が行える事全般をまとめます。
これに加え、manage.py は Django プロジェクト毎に自動的に作成されます。manage.py は django-admin と同様の機能を提供しますが以下の点に注意しておく必要が有ります:
- 後者はプロジェクトのパッケージを sys.path に保持します。
- 後者はプロジェクトの settings.py ファイルを指定するように DJANGO_SETTINGS_MODULE 環境変数を設定します。
ビューの作成
Hello World!
という文字列を表示するビューを作成するためにboards/views.py
を以下のように編集する。
変更前
from django.shortcuts import render # Create your views here.
変更後
from django.http import HttpResponse def home(request): return HttpResponse('Hello, World!')
URL の対応付け
次にビューを呼ぶためにURL を対応付ける。URLの対応付けはmyproject/urls.py
でできるが、中身を見てみると3つの例が書いてあるので"Function views"と"Including another URLconf"を試してみる。
"""myproject URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.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 urlpatterns = [ path('admin/', admin.site.urls), ]
なお、チュートリアルでは以下のようにfrom django.conf.urls import url
を使用しているが、Django 2.0ではpathが使えるようになっているのでpath
を使用する。
from django.conf.urls import url from django.contrib import admin from boards import views urlpatterns = [ url(r'^$', views.home, name='home'), url(r'^admin/', admin.site.urls), ]
Function views
Function viewの例で書かれていたようにmyproject/urls.py
を編集してみる。
from django.contrib import admin from django.urls import path from boards import views urlpatterns = [ path('', views.home, name='home'), path('admin/', admin.site.urls), ]
これでhttp://192.168.33.10:3000/
などにアクセスするとHellow World!
が表示される。
path('', views.home, name='home')
の第一引数はroute
で、これを""
から"boards"
に変更するとhttp://192.168.33.10:3000/boards/
へのアクセスでHellow World!
が表示されるようになる。
第二引数はview
でviews.py
のhome
関数が呼ばれることを意味する。
第三引数はname
で以下のようなメリットがあるとのこと。
URL に名前付けをしておけば Django のどこからでも明確に参照でき、とくにテンプレートの中で有効です。この便利な機能のおかげで、プロジェクトのURLにグローバルな変更を加える場合にも1つのファイルを変更するだけで済むようになります。
URLの対応付けがうまく言っていない場合は下記画像のような画面が表示される。
Including another URLconf
この方法では最初に下記内容のboards/urls.py
ファイルを作成する。
from django.urls import path from . import views urlpatterns = [ path('', views.home, name='index'), ]
そして、myproject/urls.py
でboardsのURLconfをinclude()
で読み込む。
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('', include('boards.urls')), path('admin/', admin.site.urls), ]
これでhttp://192.168.33.10:3000/
などにアクセスすると同様にHellow World!
が表示される。
まとめ
- プロジェクトはあるウェブサイト向けに設定とアプリケーションを集めたもの
django-admin startapp
またはmanage.py startapp
でアプリケーションの雛形を作成- Django 2.0からは
from django.urls import path
が使用可能 - URLの対応付けには"Function views"と"Including another URLconf"といった方法がある