似非プログラマのうんちく

「似非プログラマの覚え書き」出張版

巳年じゃないけど Python やろうぜ(その 4)

ちょっと前回の補足。

もし Python 3.6.0 しか入れていないか、もしくは Python 2.7.x の後に Python 3.6.0 をインストールしていて、なおかつ Python Launcher をインストールしていたなら、開発用サーバの起動は

>manage.py runserver

で行えます。その他の Django 用のコマンドも同様に実行できます。

Django アプリを作る

アプリを作るためのコマンドは「うまくいった!」のページに書いてありましたね。今回は hello という名前のアプリを作ります。

>manage.py startapp hello

こんな感じで新たに hello というフォルダができています。

django_test
│  db.sqlite3
│  manage.py
│
├─django_test
│      settings.py
│      urls.py
│      wsgi.py
│      __init__.py
│
└─hello
    │  admin.py
    │  apps.py
    │  models.py
    │  tests.py
    │  views.py
    │  __init__.py
    │
    └─migrations
            __init__.py

Hello ページを作る

実際に Hello ページを作ってみましょう。django_test\hello\views.py を編集して以下のようにします。

from django.http import HttpResponse


def index(request):
    return HttpResponse('Hello, Django!')

Python のお作法として

  • 関数定義などのブロックはインデント(半角スペース 4 個)で明示する
  • 関数定義やクラス定義などの前には空行を二つ入れる
  • ファイルの終端は改行で終わる

などがあります。だいたいは pep8 が教えてくれるので、その通りにやりましょう。

次に django_test\django_test\urls.py を編集します。

from django.conf.urls import url, include  # include を追加
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello/', include('hello.urls')),  # この行を追加
]

コメントは分かりやすさのために入れてるので、実際には書かなくても大丈夫*1です。

これは何をやっているのかというと、http://localhost:8000/hello/ にアクセスしたら、それ以降の URL 文字列の処理を hello アプリの urls モジュールに委ねますよ、ということです。

なので、当然 django_test\hello\urls.py を作成することになります。このファイルはあらかじめ用意されていないので、新規に作成します。

from django.conf.urls import url
from . import views

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

これで http://localhost:8000/hello/ にアクセスしたら、先ほど views.py に書いた index 関数が呼ばれるようになりました。

最後に、settings.py を編集して、hello アプリが追加されたことをプロジェクトに教えてやります。

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'hello',  # この行を追加
]

さて、開発用サーバを起動して http://localhost:8000/hello/ にアクセスしてみましょう。

表示されました。でもこれ、本当にただのテキストです。HTML でも何でもありません。HTML を表示させるには HttpResponse に HTML を渡す必要があります。でも直接長々と HTML を書き込むのは面倒ですよね。そこでテンプレートの登場となります。

*1:ちなみに行末にコメントを書くときは半角スペース 2 個分開けてから書きなさい、と pep8 が教えてくれました。