Python で Web アプリケーションを作る場合、Python で実装されたWebフレームワーク Django がよく使われます。
Django の学習のために公式のチュートリアルを実施する人も多いと思います。
簡単な投票(poll)アプリケーションを作成する内容になっているようです。
ただ、この公式チュートリアル、分かりづらいという感想をよく目にします。
そこで、今回は Django 公式チュートリアルをやってみたいと思います。
環境
使用している環境は次の通りです。
- Mac mini (M1, 2020)
- MacOS Monterey バージョン 12.0.1
- pyenv 2.2.0
- Python 3.10.0
- Pipenv 2021.5.29
Mac を使用しているので、Windows を使用されている方は少し読み替えが必要かもしれません。
また、pyenv を使用して Python をインストール、Pipenv を使用して仮想環境を作成して進めます。
その1でやること
Django 公式チュートリアルの「その1」でやっていることは、
- プロジェクトを作成する
- 開発用サーバー
- Polls アプリケーションをつくる
- はじめてのビュー作成
の4点です。
本記事でもこの4点を実施します。
環境構築
まずは pyenv と Pipenv を使用して環境を準備します。
pyenv は Mac 向けのパッケージマネージャーである Homebrew を使用してインストールしています。
pipenv は pip を使用してインストールしています。
pip install pipenv
pyenv で Python をインストール
まずは、pyenv で Python をインストールします。
本記事を書いている時点の最新である 3.10.0 を使用します。
pyenv でインストールできる Python は次のコマンドで確認できます。
pyenv install -l
次のコマンドで Python 3.10.0 をインストールします。
pyenv install 3.10.0
使用する Python のバージョンをインストールした Python 3.10.0 に次のコマンドで切り替えます。
pyenv global 3.10.0
Pipenv で仮想環境を作成
続いて Pipenv で仮想環境を作成します。
Django チュートリアル用のフォルダーを作成し、そのフォルダーに移動した後、下記コマンドで仮想環境を作成します。
(本記事ではtaklog_django_tutorial
という名前のフォルダーを作成しました)
pipenv shell
本来は pipenv --python 3.10.0
というコマンドで Python のバージョンを指定して仮想環境を作成しますが、なぜか 3.10.0 が見つからないとエラーになるので、今回はこのコマンドで仮想環境を作成しました。
本来は仮想環境に入るコマンドですが、仮想環境が作成されていない場合はこのコマンドで作成して、仮想環境に入った状態になります。
仮想環境に入るとプロンプトの上に仮想環境名(フォルダー名)が表示されます。
仮想環境の作成に成功すると「Pipfile」というファイルが作成されます。
Django をインストール
続いて、仮想環境上で Django をインストールします。
仮想環境に入っている状態で次のコマンドを実行します。
pipenv install django
pipenv
コマンドを使用することで、「Pipfile.lock」というファイルが作成され、インストールした外部ライブラリーのバージョンを記録してくれます。
チュートリアルその1をやってみる
環境が構築できたので、チュートリアルに沿って順番に進めていきます。
まずは Django のバージョンを確認しています。
python -m django --version
上記の実行結果
3.2.9
ということで、本記事を書いている時点では 3.2.9 がインストールされました。
チュートリアルは Django 3.2 で書かれているようなので、このままで良さそうですね。
プロジェクトを作成する
続いて、プロジェクトの作成です。
チュートリアルでは次のコマンドでプロジェクトを作成しています。
django-admin startproject mysite
この通り実行しても良いのですが、このままだと「mysite」フォルダーが作成され、その中に「mysite」というプロジェクトが作成されるので、今回は次のコマンドでプロジェクトを作成します。
django-admin startproject mysite .
最後に.
を付けることで、「mysite」フォルダーは作成されずに、今いるフォルダーに「mysite」というプロジェクトが作成されます。
プロジェクトが作成された後の「taklog_django_tutorial」フォルダーは次のような構成になります。
taklog_django_tutorial
├── Pipfile
├── Pipfile.lock
├── manage.py
└── mysite
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
プロジェクトの作成により生成されたファイルの役割についてはチュートリアルを参照してください。
開発用サーバー
次にチュートリアルでは開発用サーバーを起動して動作を確認しています。
開発用サーバーは次のコマンドで起動します。
python manage.py runserver
コマンド実行後に表示されるメッセージの中に「http://127.0.0.1:8000/」があれば開発用サーバーが起動できているはずです。
Google Chrome などの Web ブラウザで「http://127.0.0.1:8000/」にアクセスしてみましょう。
次のように表示されていれば、プロジェクトの作成、開発用サーバーの起動に成功しています。
開発サーバーの起動まで確認できたら、control + C で開発用サーバーを停止しておきましょう。
Polls アプリケーションを作る
続いて、アプリケーションを作成します。
プロジェクトとアプリケーションの違いについて、チュートリアルには、
プロジェクトとアプリケーション
https://docs.djangoproject.com/ja/3.2/intro/tutorial01/#creating-the-polls-app
プロジェクトとアプリの違いは何でしょうか? アプリとは、ウェブログシステム、公的記録のデータベース、小規模な投票アプリなど、何かを行う Web アプリケーションです。プロジェクトは、特定のウェブサイトの構成とアプリのコレクションです。プロジェクトには複数のアプリを含めることができます。 アプリは複数のプロジェクトに存在できます。
と記載されています。
なんだか難しいですが、プロジェクトは Web サイト全体のことを指し、アプリケーションは Web サイトが持っている機能を指していると考えれば分かりやすいかなと思います。
Polls(投票)アプリケーションを作る=「mysite」という Web サイトに 「polls(投票)」機能を追加する、ということです。
アプリケーションは次のコマンドで作成します。
python manage.py startapp polls
「polls」アプリケーションが追加された後の「taklog_django_tutorial」フォルダーは次のような構成になります。
taklog_django_tutorial
├── Pipfile
├── Pipfile.lock
├── db.sqlite3
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── polls
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
「db.sqlite3」と「polls」フォルダーが追加されていますね。
この構成が Django で Web アプリケーションを作る際の基本の構成になります。
はじめてのビュー作成
その1の最後はビューの作成です。
ビューなので表示に関するものですね。
ここから Python ファイルを編集していきます。
ここで編集するファイルは3つです。
polls/views.py
まずは「polls」フォルダーにある「views.py」ファイルです。
「views.py」ファイルを次のように編集します。
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
関数(ファンクション)ベースビューが使われています。
index()
関数が呼び出されると、「”Hello, world. You’re at the polls index.”」と記載されたページが Web ブラウザ上に表示されます。
mysite/urls.py
次は、チュートリアルとは順番が前後しますが、「mysite」フォルダーにある「urls.py」ファイルです。
「urls.py」は Web アプリケーションにアクセスする時の URL と その URL にアクセスされた時の処理を紐づける役割をします。
チュートリアルでは「urls.py」のことを「URLConf」と呼んでいたりもします。
次に出てきますが、「polls」フォルダーにも「urls.py」を追加しますが、大元はプロジェクトである「mysite」フォルダーにある「urls.py」になります。
プロジェクト「mysite」フォルダーの「urls.py」を次のように変更します。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
変更箇所はGithubの差分を確認していただくと分かりやすいかもしれませんが、次の2点です。
from django.urls import include
を追加(from django.urls import path
が元々あったので、横にinclude
を追加)- リスト
urlpatterns
にpath('polls/', include('polls.urls')),
を追加
ここで追加した内容は、開発用サーバーの場合、
「http://127.0.0.1:8000/polls/」へアクセスがあった場合、「polls」アプリケーションの「urls.py」を参照する
という設定になります。
元々あったpath('admin/', admin.site.urls),
も同じ内容の設定で、こちらは「urls.py」ではありませんが、「admin」パッケージの「site.py」モジュールの中にurl()
関数(正確にはget_url()
関数)があり、その中にリストurlpatterns
があります。
なので、「http://127.0.0.1:80000/admin/」にアクセスがあった場合は「site.py」モジュールのurl()
関数を参照する、という設定になります。
polls/urls.py
3つ目は、「mysite」フォルダーの「urls.py」に、「polls」アプリケーションの「urls.py」を参照するという設定を追加しましたが、「polls」フォルダーには「urls.py」が無いので、新規で作成します。
「polls」フォルダーの「urls.py」は次のように記載します。
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
from . import views
は先程変更した「polls」フォルダーの「views.py」をインポートしています。
リストurlpatterns
のpath()
関数の設定は、
「http://127.0.0.1:8000/polls/」へアクセスがあった場合、「views.py」のindex()
関数を実行する
という内容になります。また、この URL を識別する名前を「index」と設定しています。
開発用サーバーで確認
最後に開発用サーバーを起動して、動作を確認してみましょう。
python manage.py runserver
コマンドで開発用サーバーを起動し、Web ブラウザで「http://127.0.0.1:8000/polls/」にアクセスしてみましょう。
3つのファイルを正しく編集、作成できていれば、次のように表示されます。
確認が済んだら、control + C で開発用サーバーを停止しておきましょう。
Github
ここまでで、もう一度 Git でコミットし、Github にプッシュしました。
差分を確認していただくと、変更内容が分かりやすいと思います。
差分
ファイル
おわりに
以上で Django チュートリアルその1の内容は終了です。
どうでしたでしょうか。
躓いたりしていないでしょうか。
内容自体は多くありませんが、いきなり覚えたり、全部を理解するのは難しいかもしれないので、とりあえずはチュートリアルの指示通りに進めて、動作が確認できればOKだと思います。
何度も繰り返すことで理解も深まるので、現時点で理解が不十分でも、まずは一通り先へ進めることをオススメします。
その2の記事もなるべく早く作成しますので、少々お待ちください。
以上です。
コメント