pyhaya’s diary

機械学習系の記事をメインで書きます

Djangoのチュートリアル 1 インストールから最初のビュー作成まで

最近Djangoの勉強を始めました。最初は公式のチュートリアルで勉強をしていたのですが、もっと面白そうなものを作ってみたくなりほかのサイトを見ていたら、Djangoのバージョンが古かったり、デザインがやけに凝っていてDjango初心者には大事なところがわかりにくくなってしまっていたりとなかなか苦労することになりました。なので初心に帰って、まずはデザインは二の次にして、Djangoについて改めて勉強しました。この記事はその備忘録のようなものです。

今回のコードは以下の環境で動作させています。

  • Windows10 (WSL上で作業)
  • Python 3.6.5
  • Django 2.1.2 (venvで仮想環境を作成し、その中にインストール)

記事はDjangoの公式チュートリアルを参考にしています。

Djangoとは

DjangoとはPython製のWebフレームワークです。Webフレームワークというのは、Web開発をサポートするためのツールです。Web開発のための独具を用意してくれるので、一から自分で作るよりも作業が楽になります。Djangoはすでに大きな実績があってInstagramedXなどがDjangoで作られています。

Djangoのインストール

Pythonはすでに使えるものと考えます。まず、Python(Python 3.3以降)に標準で含まれているvenvを使って仮想環境を構築します。コマンドライン上で

$ python -m venv env    # envは仮想環境名、好きな名前を付けてください

これだけで仮想環境の構築は終わりです。次に仮想環境を起動します。起動のしかたはLinuxWindowsで異なりますが、Linuxだと

$ source env/bin/activate
$ (env) /mnt/c/Users/    #立ち上がるとパス名の最初に"(仮想環境名)"の表示が現れる

Windows
qiita.com
が参考になると思います。

仮想環境が起動した状態で、作業をしていきます。まず、Djangoを入れましょう、といいたいところですが、まずはPythonのパッケージマネージャーpipの更新をします。仮想環境を構築したばかりだとなぜか9.0.0あたりが入ってくるのですが、現時点でも18.0.0くらいまで出ています。

$ pip install --upgrade pip    #pipのアップグレード
$ pip --version
pip 18.1
$ pip install django    #Djangoのインストール
$ python    #Python起動
>> import django
>> django.get_version()
'2.1.2'

ここまででエラーが出なければインストール完了です。以降の作業ではすべて仮想環境が起動した状態で行います。仮想環境を閉じるときには

$ deactivate

で閉じます。

Django projectを作る

DjangoでWebアプリケーションを作成していきます。まずは一番大きなくくりであるプロジェクトを作っていきます。このプロジェクトの内部に様々なアプリケーションを作りこんでいきます。次のコマンドをコマンドライン上で(仮想環境を起動させた状態で)実行してみてください。

$ django-admin startproject mysite

少し待つと、mysiteディレクトリが作られます。その内部は

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

となっているはずです。最初に基本的な設定を行います。mysite内のsettings.pyを変更します。

#...
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

では最初のページを見てみます。コマンドライン上で

$ python manage.py runserver

と打つと、サーバが起動して次のように表示されます。

Performing system checks...

System check identified no issues (0 silenced).

You have 15 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.

October 26, 2018 - 07:31:50
Django version 2.1.2, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

「You have 15 ...」の部分は今のところ無視して大丈夫です。http://127.0.0.1:8000/にアクセスして、次のような画面が表示されればOKです。
f:id:pyhaya:20181026074135p:plain

Django applicationを作る

ではアプリケーションを作ります。manage.pyのあるディレクトリにいることを確認して

python manage.py startapp polls

pollsという名前のアプリケーションを作りました。ここまででディレクトリ構造は

.
├── 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
    ├── admin.py
    ├── apps.py
    ├── __init__.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

となります。pollsディレクトリが新たに作られていることがわかります。ではもっとも簡単なページとして、一文だけ文章を表示するWebページをpollsアプリケーションで作りましょう。ページの見た目はviews.pyで編集します。

polls/view.py

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

def index(request):
    return HttpResponse("Hello World. This is polls application")

HttpResponseで引数に指定した文字列が実際のページに表示されます。では、次にページURLの設定をします。pollsディレクトリの中にurls.pyを作って、次にように記述します。

polls/urls.py

from django.urls import path
from . import views

urlpatterns = [
        path('', views.index, name='index'),    #views.pyに定義したindexをpollsアプリケーションのルートに読み込む
        ]

URLの設定はmysite中にも書く必要があります。というのもDjangoでは、各アプリケーションが階級構造のような構造をとっているからです。今回は、プロジェクトを作ったときに最初にできたmysiteディレクトリが一番上で、その下にpollsが位置しているようなかたちをとっています。この様子を図であらわすと、f:id:pyhaya:20181026083842p:plainのような感じになります。pollsアプリケーションでindex viewへのURLはpolls/urls.pyで指定しました。次にmysiteからpollsへの矢印の部分を作ります。

mysite/urls.py

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

urlpattern = [
    path('polls/', include('polls.urls')),   #pollsディレクトリ内のurls.pyにあるURLを読み込み、polls/下に組み込む
    path('admin/', admin.site.urls),

これでpollsアプリケーションをプロジェクトに組み込めました。python manage.py runserverでサーバーを起動して、
http://127.0.0.1:8000/pollsにアクセスしてみます。真っ白な画面に「Hello, World. This is polls application」が表示されれば成功です。

pyhaya.hatenablog.com