2. はじめての Django アプリ作成、その 1
出典:はじめての Django アプリ作成、その 1 | Django ドキュメント | Django
https://docs.djangoproject.com/ja/3.2/intro/tutorial01/
2.1. プロジェクトを作成する
myproject の中に Django のプロジェクト mysite を作成します。
% django-admin startproject mysite
この時点でのディレクトリ構成は以下の通り。>
はいま自分がいる場所です。+
は追加されたファイル。
> myproject/
+ mysite/ (外側のmysite)
+ manage.py
+ mysite/ (内側のmysite)
+ __init__.py
+ settings.py
+ urls.py
+ asgi.py
+ wsgi.py
myvenv/
mysite の中に mysite があってややこしいですね。チュートリアルではそれぞれ「外側のmysite (outer mysite)」と「内側のmysite (inner mysite)」というふうに区別しています。
2.2. 開発用サーバー
Django のプロジェクトがうまく動作するか開発用サーバを立ち上げて確認してみます。
外側のmysite に移動します。
% cd mysite
いま自分がいる場所はここです。
myproject/
> mysite/ (外側のmysite)
manage.py
mysite/ (内側のmysite)
(省略)
myvenv/
サーバを立ち上げます。
% python manage.py runserver
特に問題がなければ http://127.0.0.1:8000/ でサイトにアクセスできるようになります。
確認後、サーバを停止する場合は control + c
を入力します。
2.3. polls アプリケーションを作る
プロジェクト mysite の中にアプリケーション polls(投票)を作成します。開発の手順としては「プロジェクト」の中に「アプリ」を盛り込んでいくというのが Django の作法のようです。
外側のmysite にいる状態で以下のコマンドを実行します。これにより 外側のmysite 下に polls ディレクトリが作成されます。
% python manage.py startapp polls
この時点でのファイル構成は以下の通り。「>」はいま自分がいる場所。+ はここまでで追加されたファイル。
myproject/
> mysite/ (外側のmysite)
manage.py
mysite/ (内側のmysite)
(省略)
+ polls/
+ __init__.py
+ admin.py
+ apps.py
+ migrations/
+ __init__.py
+ models.py
+ tests.py
+ views.py
myvenv/
2.3.1. はじめてのビュー作成
2.3.1.1. polls/views.py の編集
polls/views.py にコードを書きます。コードの理解のため、コメントが追加してあります。コメントは動作には関係ないので自分でコードを書く場合は削除して構いません。
from django.shortcuts import render
# 最初から入ってるコード。
# テンプレートを使うときに必要になるらしい。
# 現時点では特に関係ないので、放っておいていい。(コメントアウトしてもいい。)
from django.http import HttpResponse
# django.http モジュールの HttpResponse を読み込む という意味。
# django.http モジュールは、具体的には
# myvenv/lib/python3.7/site-packages/django/http にある。
# import [モジュール] だと、モジュール全体
# from [モジュール] import [モジュールの属性(オブジェクト)] だとモジュールの属性
# がそれぞれ使えるようになる。そのへんの話は以下のページがわかりやすかった。
# Pythonのモジュールとimportとfrom入門 - Qiita
# https://qiita.com/niwaka_dev/items/6e3d9ff6d797243c77c3
#インデックス ページ
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
# 実行すると django.http モジュールの HttpResponse を使ってメッセージを返す。
# HttpResponse はほかにも使い方いろいろ。
# https://docs.djangoproject.com/en/3.2/ref/request-response/#httpresponse-objects
2.3.1.2. polls/urls.py の編集
編集した polls.views (polls/views.py) モジュールを呼び出すため、URLconf(urls.py)を作成し、 URLの対応付け(URLdispatcher)を行います。
polls ディレクトリ下に urls.py を作成して、以下のコードを書きます。
from django.urls import path
# django.urls モジュールの path を読み込んでいる。
# myvenv/lib/python3.7/site-packages/django/urls
from . import views
# from の .(ドット)は相対パスで同階層のディレクトリを意味している。
# よって同階層にある views モジュール(views.py)を読み込んでいる。
urlpatterns = [
# ex: /polls/
path('', views.index, name='index'),
# polls/ (pollsのroot) にアクセスすると views.index を呼び出す という意味。
# name は template から url を参照するときに便利らしい。
#
# python、djangoのurls.pyで設定するnameってなんやねん?? - Qiita
# https://qiita.com/sr2460/items/11a1129975913ed584d3
]
# path()
# https://docs.djangoproject.com/ja/3.2/ref/urls/#path
# path(route, view, kwargs=None, name=None)
# route: urlパターン
# view: 呼び出すview関数
# kwargs: 任意のキーワード引数を辞書としてviewに渡す
# name: urlの名前(別名?)
ここまでの構成。
myproject/
mysite/ (外側のmysite)
manage.py
mysite/ (内側のmysite)
(省略)
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
+ urls.py
views.py
myvenv/
2.3.1.3. mysite/urls.py の編集
root (mysite) の URLconf (mysite/urls.py) に polls.urls モジュールを反映させます。
from django.contrib import admin
from django.urls import include, path
# urlpatterns で使う include を追加する。
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
# polls/ へのアクセスは polls.urls (polls/urls.py) を参照する。
# admin.site.urls はよくわからんけどそういうものらしい。深く考えなくていいもの。
# urlpatterns は上から順番に走査される。
2.3.1.4. サーバで確認
開発用サーバでここまでの成果を確認します。
サーバを立ち上げ。
% python manage.py runserver
http://127.0.0.1:8000/polls/ にアクセスして、polls.views のindex に入力した “Hello, world. You’re at the polls index.” が表示されれば成功です。