Djangoチュートリアルを意訳しながら進める~その1~

2018年12月14日

Djangoの英語の公式チュートリアル(ver.2.1)を適当に訳しながら進めていく記事でR。順番にやっていく。まずはここから↓
https://docs.djangoproject.com/en/2.1/intro/tutorial01/

まずはDjangoをpipでインストール

まずはpipを最新にしておく。

$ pip install -U pip

Djangoをインストール。

$ pip install Django

インストールできたか確認。

$ python -m django --version

プロジェクトを作る

さて、最初のプロジェクトを作ろうか。

$ django-admin startproject mysite

するとmysiteフォルダが出来るから移動してみよう。

$ cd mysite

どんな構成になっているか見てみよう。

$ tree

.
├── manage.py
└── mysite
      ├── __init__.py
      ├── settings.py
      ├── urls.py
      └── wsgi.py

1 directory, 5 files

各ファイルの存在意義は以下の通り。この世に生を受けた以上、みんな生きる意味がある。

manage.py
コマンドラインユーティリティー。コマンドラインから様々な操作をするためのプログラムが書かれている。

mysite/__init__.py
中身のないファイル。Pythonのルールで、__init___.pyファイルがあるディレクトリはPythonパッケージとして扱うことが出来る。

mysite/settings.py
このプロジェクトの設定用ファイル。

mysite/urls.py
このプロジェクトのURLの設定。サイトの目次といってもいいかもしんまい。

mysite/wsgi.py
webアプリケーションサーバーを使うときに設定する。

さて、このプロジェクトに早速ブラウザからアクセスしてみよう。
上で説明したmanage.pyを使う。

$ python manage.py runserver

これだと、仮想環境内で実行しているときにはアクセスできないかもしれない。
そんな時はこんな感じ。

$ python manage.py runserver 0:8000

サーバーを走らせた後は次のアドレスにアクセス。

http://localhost:8000/

するとこんな感じの画面がでる。

このロケットをクリックすると・・・・・・・たぶん何も起きない

投票アプリを作っていく

さて、サンプルアプリを作っていく。pollsに関するアプリ、つまり投票アプリである。
チュートリアルで投票のアプリを作るって・・・・このあたり、アメリカ人の投票への関心の高さが伺えると言えよう。
またまたmanage.pyを使っていく。

$ python manage.py startapp polls

こんな感じになる。__pycasheつーのもあるけど、あんま意味ない。

.
├── db.sqlite3
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── settings.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── wsgi.cpython-36.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── polls
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

pollsフォルダのviews.pyをいじる。
もともとなんか書いてあるけど、↓の文章を特攻(ぶっこ)む。

from django.http import HttpResponse

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

これでアクセスされたときにレスポンスを返すことが出来るようになった。
でもこれだけでは動かない。
URLと紐づける必要があるばってん。
まずは、pollsフォルダの中にurls.pyファイルを作成する。
そしてこれを特攻む。

from django.urls import path

from . import views

urlpatterns = [
    #この設定はviews.pyのdef indexを参照するってこと。
    path('', views.index, name='index'),
]

次は、mysiteのフォルダにあるurls.pyをいじる。これは元からある。

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

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

includeってのは他のurlの設定ファイルを読み込むときに使う。ここではpollsフォルダのurl.pyを参照している。
アドレスのpollsにアクセスされたら、pollsフォルダ内のurl.pyを参照して最終的にはpolls/views.pyのdef indexが実行される。
多少ややこしいと思うかもしれないけど、この方がサイトが大規模になったとき管理しやすい。と思う。
さて、サーバーを走らせてみよう。

$ python manage.py runserver

$ python manage.py runserver 0:8000

だよ。
んでもって、さっき設定したpollsにアクセスしてみる。

http://localhost:8000/polls/

pollsアプリ最初の画面

この英文をクリックすると・・・・・たぶんなにもない。

そっけない画面だね。Djungoってツンデレなのかな?いや、自分の実力不足だネ。

pathで設定できる引数について

path()は4つの引数を取れる。2つは必須。それはrouteとview。あとの二つはオプションだけど、それはkwargsとname。

routeの引数はURLパターンを含む文字列を設定する。Djangoはブラウザからアクセスがあった時に、ここに設定されたURLパターンを順次あたっていく。尚、GETやPOSTパラメーターは探さない。

viewはDjangoがマッチングするパターンを見つけたときに呼ぶプログラム。

kwargsはviewに設定したプログラムに引数を渡すときに使う。辞書形式で渡す。

nameを付けておくと、これからでてくる「テンプレート」ファイル等の中で直接URLを指定せずに、このnameに設定した文字列で色々できる。

さて、次回に続く。

Djangoチュートリアルを意訳しながら進める~その2~