夏休みの絵に使える技法を紹介したこちらの記事が人気です!
Categories情報処理

Django公式サイトのチュートリアルを咀嚼しながらやってみる

Date 2021/05/25 02:30  Author Yutaka  Tags やってみた

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.” が表示されれば成功です。

Back to Top