支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


Django

Djangoは、「ジャンゴ」と読みます。Pythonで実装されたWebアプリケーションフレームワークのひとつです。Webフレームワークとは、アプリケーション開発の際に使用される機能一式(ユーザー認証、管理者用画面、フォーム、ファイルアップロードなど)がまとめられたソフトウェアを指します。このフレームワークを利用することによって、幅広くWebアプリケーションの開発に対応でき、効率よく開発を進めることができます。様々な機能を搭載しており、無料のオープンソースとして公開されています。Djangoは、コンテンツ管理システムやWiki、ソーシャルネットワーク、ニュースサイトなど、ほとんどのタイプのWebサイトを構築することができます。任意のクライアントサイドフレームワークで動作し、HTML、RSSフィード、JSON、XMLなどほとんどの形式のコンテンツを配信できます。Djangoは、InstagramやPinterest、National GeographicなどのWebアプリで使われています。この記事では、MacOS(Linux)でDjangoを使用し、ブラウザで文字を表示させるまでのチュートリアルを紹介します。

Django インストール

DjangoはPythonのW​​ebフレームワークなので、Djangoを使うためには事前にPythonのインストールが必要です。Pythonのインストールが完了した後にこれからの操作を行いましょう。

1、 このチュートリアルのためにホームディレクトリに新規のディレクトリ(django-tutorial)を作成し移動します。ターミナルを起動し以下のコマンドを実行します。


$ mkdir django-tutorial
$ cd django-tutorial

2、 仮想環境(myvenv)を作成します。仮想環境の名前は小文字表記かつスペースは入れないように注意してください。


$ python3 -m venv myvenv

3、 作成した仮想環境を起動します。


$ source myvenv/bin/activate

sourceを使用して起動できなかった場合には以下を実行してみましょう。


$ . myvenv/bin/activate

コンソールでプロンプトの先頭に(myvenv)がついていれば起動成功です。
※仮想環境を無効化したい場合にはどちらのOSとも「deactivate」を実行します。

4、 「requirementsファイル」を使用して「Django」をインストールします。 requirementsファイルとは「pip install」でインストールする依存関係の一覧が記載されているファイルです。お好みのエディタで新しいファイルを開いて、「django-tutorial/」フォルダ内に「requirements.txt」という名前で保存してください。ディレクトリ内は以下のようになります。


django-tutorial
├── myvenv
│   └── ...
└───requirements.txt

「djangogirls/requirements.txt」ファイル内に以下のテキストを追加します。


Django~=2.2.4

5、 仮想環境を起動した状態で、以下を実行することでDjangoのインストールは完了します。


(myvenv) ~$ pip install -r requirements.txt

チュートリアル1  新規プロジェクトの作成

仮想環境を実行した状態で、以下コマンドを実行することで、Djangoプロジェクト全体の設定ディレクトリが作成されます。基本的にDjangoスクリプトを実行しDjangoプロジェクトの骨格を作成します。「mysite」の部分はディレクトリ名のため任意で構いませんが、最後のピリオドは忘れないように注意してください。このピリオドは、現在の作業ディレクトリに Django をインストールするということを示しています。


(myvenv) ~/django-tutorial$ django-admin startproject mysite .

現在のファイル構造は下記になります。


django-tutorial
├── manage.py	#サイト管理スクリプト
├── mysite
│   ├── __init__.py	#このディレクトリがPythonパッケージであることを知らせるための空ファイル
│   ├── settings.py	#ウェブサイト設定ファイル
│   ├── urls.py	#urlresolverで使用されるパターンリスト、URL宣言
│   └── wsgi.py	#プロジェクトをサーブするためのWSGI互換Webサーバーとのエントリーポイント
├── myvenv
│   └── ...
└───requirements.txt

チュートリアル2 設定変更

「django-tutorial/mysite/settings.py」の設定の確認と変更を行います。任意のコードエディタを使用してファイルを開いてください。

1、タイムゾーンの設定
「settings.py」ファイルの下部にタイムゾーンの設定「TIME_ZONE」を探します。自分の住んでいるタイムゾーンに修正します。


TIME_ZONE = 'Asia/Tokyo'

2、言語コードの設定
言語コードは言語(英語:en、ドイツ語:de、など)と国コード(ドイツ:de、スイス:ch、など)からできています。これを追加することで、Djangoのデフォルトのボタンや通知が設定した言語に変更されます。


LANGUAGE_CODE = 'ja'

3、静的ファイルのパスの追加
「settings.py」ファイルの一番下に移動し、「STATIC_URL」の下に「STATIC_ROOT」を追加します。


STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

4、「ALLOWED_HOSTS」はサーバが受理するサーバアドレスを指定します。
クライアントから送られてきた Host: ヘッダの値と比較され、一致しない場合は 400 エラーを返します。 「DEBUG = True」かつ「ALLOWED_HOSTS = []」の場合、自動的に3つのホスト['localhost', '127.0.0.1', '[::1]']に対しチェックが行われます。

チュートリアル3 データベースセットアップ

データベースには様々ありますが、Djangoにもデフォルトで使用する「sqlite3」というデータベースがあるので、今記事ではこちらを使用します。設定はすでに「settings.py」ファイルに記載されています。


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

データベースを作成するため、コンソールで以下を実行します。


(myvenv) ~/django-tutorial$ python manage.py migrate

チュートリアル4 ウェブサーバの起動

1、 「manage.py」ファイルを含むディレクトリ(django-tutorialディレクトリ)に移動します。以下を実行しWebサーバーを起動します。


(myvenv) ~/django-tutorial$ python manage.py runserver

2、 下記アドレスにブラウザからアクセスし「インストール成功しました」と表示されていれば成功です。


http://127.0.0.1:8000/

Webサーバーが動いている間、次のリクエストを待っている状態のため、コマンドラインに新しいテキストを書いても、新しいコマンドとして実行できませんので注意してください。Webサーバーを停止するには、実行中のウィンドウに戻り、ControlキーとCキーを同時に押します。

チュートリアル5 新規アプリケーションの作成

1、 新規アプリケーションを作成します。


(myvenv) ~/django-tutorial$ python manage.py startapp helloworld

現在のファイル構成が下記になります。


django-tutorial
├── db.sqlite3
├── helloworld
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py	
├── mysite
│   ├── __init__.py	
│   ├── settings.py	
│   ├── urls.py	
│   └── wsgi.py
├── myvenv
│   └── …
└───requirements.txt

チュートリアル6 URL Conf の設定

1、 URLの設定を行います。作成した「helloworld」ディレクトリに「urls.py」を作成します。

2、 作成した「helloworld/urls.py」の中身を記載します。 path()関数の第一引数にパス、第二引数にはビュー関数(どのデータを見せるか)、第三引数には逆引きするための名前を指定します。


from django.urls import path
from . import views

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

3、 プロジェクト全体の「urls.py」(mysite/urls.py)にhelloworld.urlsモジュールの記述を反映させます。「mysite/urls.py」に「django.urls.include」のimportを追加して、「urlpatterns」のリストの一番上に 「include()」関数を挿入します。反映後が以下の通りです。 include()関数は他の URLconf への参照することができます。 path()関数は4つの引数を受け取ります。引数のうち必須な「route」と「view」、省略可能な「kwargs」と「name」です。「route」はURLパターンを含む文字列で、Djangoでは「urlpatterns」にあるリストを上から順にURLが一致するものを探します。「route」が一致すると、指定された「view」を呼び出します。「kwargs」は、任意のキーワード引数を辞書として対象のビューに渡し、「name」はURLへの名前付けです。名前付けをしておくことでDjangoのどこからでも明確に参照できるようになります。


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

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

チュートリアル7 ビューの作成

1、 URL設定で指定されたURLにブラウザからリクエストがあった際に、レスポンスとして返すデータを決定する「ビュー(view)」の設定を行います。「helloworld/views.py」を以下のように書き換えます。


from django.http import HttpResponse

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

2、 サーバーを起動(チュートリアル4参照)した後に「 http://localhost:8000/helloworld/」へアクセスを行うと「Hello, World!」と表示が確認できます。これはビューの「index」で定義しているものです。表示が確認できていれば今記事のDjangoチュートリアル完了です。