Skip to content

Djangoでウェブアプリを作る(5) – はじめてのビュー作成

前回の記事:
Djangoでウェブアプリを作る(4)

今回参照する公式チュートリアル:
https://docs.djangoproject.com/ja/3.2/intro/tutorial01

前回は、プロジェクト内にpollsアプリケーションを作成した。今回は「ビュー」というものを作成する。さて「ビュー」とは何だろう?

スポンサードリンク

はじめてのビュー作成

とりあえず「polls/views.pyを開け」とあるので開いてみる。views.py の中身は次のような状態になっている。

from django.shortcuts import render
# Create your views here.

ただ、チュートリアルの入力例は、以下のようになっている。

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

” from django.shortcuts import render ” は残しておけばいいのか?

django.shortcuts.render() とは?

views.py に自動で記述された ” from django.shortcuts import render ” は、どうやら、django.shortcuts.render()を利用するためのものらしい。

django.shortcuts.render()は、テンプレートシステムを使ってHttpResponseオブジェクトを作成してくれる便利なメソッド・・ということらしいんだが、一体、何が便利なのか、現時点ではさっぱり分からない。

もしかしたら、今は使わないが、後々出てくるということかもしれない。とりあえずコメントアウトして、チュートリアルの入力例を追加する。こんな感じでいいのか?

#from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

これがDjangoで最も単純なビューらしい。

URLの対応付け

さて、次は・・・

ビューを呼ぶために、URL を対応付けしてやる必要があります。そのためには URLconf が必要です。polls ディレクトリに URLconf を作るには urls.py というファイルを作ります。

ビューを呼ぶ・・? うーむ、もはや、何を言っているのか分からない・・

チュートリアルではurls.pyというファイルを作れという指示が・・とりあえず、空のpythonファイルを置いてみる。

そして、作ったばかりの空のファイルurls.py に以下を入力する。

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

一体、僕は何をしているのだろう?

URLconfとは?

次のステップはルートのURLconfに polls.urlsモジュールの記述を反映させることです。 mysite/urls.py に django.urls.include のimportを追加して、 urlpatterns のリストに include() を挿入します。

ああ、何だか眠たくなってきた・・って言うか、さっきから意味不明のワードが・・ URLconfって何やねん。” URLconf = polls/urls.py ” ということじゃないのか?

URLconfについて検索してみると

URLディスパッチャー = URLconf = mysite/urls.py

ということらしい。URLディスパッチャーとは、リクエストに対し、どの画面を表示するかを制御する通信指令係(dispatcher)を意味する。

確かにプロジェクト内には、urls.pyが二つある。URLディスパッチャーは、mysite/urls.py の方だ。

polls.urlsの記述を反映させる

mysite/urls.pyを開くとデフォルトで以下の記述になっている。


"""mysite URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.2/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),
]

チュートリアルではdjango.urls.includeのimportを追加して、 urlpatterns のリストに include() を挿入とある。一応、言われたとおり追加する。

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

動作確認

これでURLconfへの紐付けは完了ということらしい。プロンプトで下記のコマンドを実行して、動作確認する。

python manage.py runserver

こんな表示になった。

C:\django_project\mysite>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 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.
August 18, 2021 - 23:28:40
Django version 3.2.6, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

ここで、http://127.0.0.1:8000/にアクセスすると、エラーページが・・・

Page not found (404)

チュートリアルをよく見ると、http://localhost:8000/polls/ とある。ディスパッチャー経由で動作しているためパスが変わるらしい。

http://localhost:8000/polls/にアクセスすると・・・

「Hello, world. You’re at the polls index.」と文字が表示されたページが・・・成功だ!

シゴトがはかどる Python自動処理の教科書
スポンサードリンク:Amazon

この記事をシェア

Comments are closed, but trackbacks and pingbacks are open.