日々精進

aikoと旅行とプログラミング

DjangoでWebアプリを作りたい【第2回 Viewの作成】

前回までで開発環境が整いました。いよいよアプリケーションを作成していきます。
Djangoで書かれたアプリケーションはPythonパッケージから出来ており、ある規約にしたがってPythonパスのどこかに置かなければなりません。しかしそのパス群を提供する仕組みが存在するため、ディレクトリ構造を気にせずコーディングをすることが出来ます。
アプリケーションはPythonパスの何処にでも置くことが出来ますが、今回はmanage.pyと同じ階層につくり、自身のトップレベルのモジュールとしてimportできるようにします。

アプリケーションの作成

今回はチュートリアルに習って投票アプリ(polls)を作成したいと思います。アプリケーションを作成するには、manage.pyのある階層へ移動して

$ python manage.py startapp polls

と入力します。すると以下の様なディレクトリ構造になります。

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

はじめてのview

最初のviewを書いてみましょう。polls/views.pyを開いて以下のコードを追記します。

from django.http import HttpResponse


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

これはDjangoで最もシンプルなビューです。このViewを呼ぶために、ViewとURLをマッピングしなければなりません。そのためにURLconfを編集します。
まずディレクトリpolls内に、urls.pyというファイルを作成します。ファイル構成は以下のようになります。

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

そしてpolls/urls.pyに以下の様なコードを記述します。

from django.conf.urls import url

from . import views


urlpatterns = [
    url(r'^$', views.index, name="inedex"),
]

これでpollsのurlと、polls.views.indexがリンクされました。次にRootのurls.py(mysite/urls.py)を以下のように編集します。

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', include(admin.site.urls)),
]

これでmysite(root)のurlとpolls.urlがリンクされました。このようにすることでトップからアクセスすることが出来ます。

$python manage.py runserver

localhost:8000/pollsにアクセスすると”Hello, world. You're at the polls index.”と表示されているはずです。

url関数

urlとview、もしくはurlとurlpatternを結びつける関数です。第一引数はurlの正規表現、第二引数はView、第三引数(optional)は逆引き用です。
include関数を利用した場合、matchした部分を除いた部分が次のurlpatternsに渡されます。