お金をかけずにサーバーの勉強をしよう

Djangoインストール

2024年1月12日

メニューへ戻る

Pythonの WEBフレームワーク Djangoの環境を構築しましょう。

JavaScriptと並んで人気のあるプログラミング言語の Pythonですが、これにもちゃんと WEBサーバーを作れるフレームワークがあります。

それはこれ。
Django

「でぃ、でぃーじゃ…」ではなくジャンゴですね。
私にはジャンゴというとブラックジャックにエキノコックスを移した獣というイメージ強いですが。

Pythonというとディープラーニングに使われるイメージが強いですが、コンパイル不要で書きやすい開発限度だと思いますし、WEBアプリを作る入門にはよろしいんじゃないでしょうか。

といって、これじゃヌルいものしか作れない訳ではありません。

それでは Djangoで WEBサーバープログラムを作っていきたいと思います。


1.環境

以下、2024年1月12日時点での最新版を使います。

Ubuntu server 22.04のインストールについては「Ubuntu Linux Serverをインストール」および「Ubuntu Serverの初期設定」に書いてある通りにつくったものです。

Ubuntu Serverには Python 3がデフォルトでインストールされていますので、Python自体はインストールしなくてもそのまま使えます。

作業自体は Lubuntu 22.04.3のクライアントPCからやっています。


2.Djangoインストール

Djangoのホームページはトップこそ英語でしたが、インストールの方法は日本語になっていましたので、安心して進めましょう。
クイックインストールガイド

このドキュメントの中の以下の段落が手順となりますので、それをやっていきます。
pip を使用して公式リリースをインストールする

この手順は前提として pipコマンド(A tool for installing and managing Python packages)があることが前提になっていますが、Ubuntu Serverには入ってませんので、まずこれをインストールします。

subro@UbuntuServer2204-1:~$ sudo apt install -y python3-pip
〜〜〜 省略 〜〜〜

インストールできました。

手順に乗っている通り、pipを使って Djangoのセットをインストールします。

環境は個々のユーザーのものとして構成されます。
ここでは [subro]ユーザーでやっていますが、本当の実行環境をつくるなら専用のユーザーを作っておくのが良いでしょう。

手順の pythonコマンドは Ubuntuでは python3コマンドに読み替えてください。

subro@UbuntuServer2204-1:~$ python3 -m pip install Django
Defaulting to user installation because normal site-packages is not writeable
Collecting Django
  Downloading Django-5.0.1-py3-none-any.whl (8.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 10.5 MB/s eta 0:00:00
Collecting sqlparse>=0.3.1
  Downloading sqlparse-0.4.4-py3-none-any.whl (41 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.2/41.2 KB 9.5 MB/s eta 0:00:00
Collecting asgiref<4,>=3.7.0
  Downloading asgiref-3.7.2-py3-none-any.whl (24 kB)
Collecting typing-extensions>=4
  Downloading typing_extensions-4.9.0-py3-none-any.whl (32 kB)
Installing collected packages: typing-extensions, sqlparse, asgiref, Django
  WARNING: The script sqlformat is installed in '/home/subro/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script django-admin is installed in '/home/subro/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed Django-5.0.1 asgiref-3.7.2 sqlparse-0.4.4 typing-extensions-4.9.0

インストールできました。
パスが通っていない([PATH]環境変数に入ってない) [~/./local/bin]ディレクトリに実行ファイルを配置した旨を言っていますが、ちゃんと通っていますので無視します。

~/.local/bin 以下にも2つのファイルができていました。

:
subro@UbuntuServer2204-1:~$ ls -l .local/bin
合計 8
-rwxrwxr-x 1 subro subro 263  1月 12 22:01 django-admin
-rwxrwxr-x 1 subro subro 216  1月 12 22:01 sqlformat

Pythonモジュールとしての Djangoは、[~/.local/lib/python3.10]ディレクトリ以下に納められています。


3.Djangoのプロジェクト作成

django-adminコマンドを使えるようになりましたので、プロジェクトを作っていきましょう。

以下のページに日本語チュートリアルがありますので、それに従って進めていきます。
さぁ始めましょう

こちらのチュートリアルに「はじめての Django アプリ作成」が 1 から 8 までありますが、2 以降はデータベースを使ってのものになり、純粋に Djangoだけのことではなくなってしまいますので、Hello World的なものとして、1 だけをやることにします。

という訳で、こちらをやっていきます。
はじめての Django アプリ作成、その 1

ワーキングディレクトリを [~/work/django] として進めていきます。

Djangoのバージョン確認です。

subro@UbuntuServer2204-1:~/work/django$ python3 -m django --version
5.0.1

mysiteプロジェクトを作成します。

subro@UbuntuServer2204-1:~/work/django$ django-admin startproject mysite

何ができたでしょうか。

subro@UbuntuServer2204-1:~/work/django$ tree -a
.
└── mysite
    ├── manage.py
    └── mysite
        ├── __init__.py
        ├── asgi.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py

2 directories, 6 files

チュートリアルにある通りのファイルができていました。


4.Djangoのプロジェクト実行

プロジェクトの動作確認をします。
[mysite]ディレクトリに移動してから実行しろとあります。

subro@UbuntuServer2204-1:~/work/django$ cd mysite

subro@UbuntuServer2204-1:~/work/django/mysite$ python3 manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 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.
January 12, 2024 - 13:31:05
Django version 5.0.1, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

何やら出ていますが、チュートリアルの注釈には

適用されていないデータベースマイグレーションについての警告はここでは無視します、後ほどすぐにデータベースとともにたっぷりと取り組みます。
とありますので、ここでは気にしなくて良いのでしょう。

[http://127.0.0.1:8000/] で待ってるようですので、WEBブラウザで見てみましょう。

と言いつつ、[UbuntuServer2204-1]サーバーにはウィンドウシステムがインストールされておらず、WEBブラウザもありません。
[127.0.0.1]にバインドされてしまうと WEBブラウザのあるクライアントPCから閲覧できません。

こういうときのために「SSHトンネリング」を書いておきましたので、これを使います。
Lubuntuでターミナルをもう一つ開いてこいつをやってやります。

subro@UbuntuServer2204-1:~/work/django$ ssh -L localhost:8000:127.0.0.1:8000 UbuntuServer2204-1

Lubuntuの Firefoxで [http://127.0.0.1:8000/] にアクセスすれば、[UbuntuServer2204-1]サーバーの [127.0.0.1:8000] を見に行くはず。

こんなのが出ました。\(^o^)/
リンクは全部インターネットへのものだったので、この画面はこれだけですね。
Django画面

デフォルトでは localhost[127.0.0.1]での待ち受けになるようなので、これを外部からもアクセスできるようにするには、チュートリアルの続きに書いてあるようにやってみて下さい。
[0.0.0.0:8000] が全ての IPアドレスに [8000/tcp] をバインドするという意味です。
先に起動していたプロジェクトはCtrl+cにて終わらせ、改めて以下を実行します。

subro@UbuntuServer2204-1:~/work/django$ python3 manage.py runserver 0.0.0.0:8000

[http://UbuntuServer2204-1:8000] にアクセスすれば同じ様に…出ない。
ALLOWED HOSTに入ってないエラー

以前のバージョンよりセキュリティが強化されていますね。

[~/work/django/mysite/mysite/settings.py]ファイルの 28行目を以下のように書き換えます。

ALLOWED_HOSTS = []
                ↓
ALLOWED_HOSTS = ['*']

再度実行します。

subro@UbuntuServer2204-1:~/work/django$ python3 manage.py runserver 0.0.0.0:8000

今度は上と同じ画面を得ることができました。

チュートリアルはこの後も延々と続いていきまして、次が「Polls アプリケーションをつくる」の段落になります。

ここからはモロにコーディングに入っていってしまい、環境構築とは別の Djangoでの開発の世界になってきますので、チュートリアルに沿って進めていただければと思います。


==========
pipコマンドで Pythonモジュールのインストールをしたことがあれば、環境構築自体は簡単だと思います。

WEBシステムを作る上でどうしても JavaScriptからは逃れられませんが、せめてサーバーサイドは慣れている Pythonでやりたい方にはこれも選択肢になるのではないでしょうか。

人気のフレームワークですからインターネット上にも情報が豊富にありますし、比較的チャレンジしやすいと思います。

Pythonで作るということは、現在 Pythonで作られている膨大なライブラリを WEBシステムのロジック部分に使えるということです。

アイデア次第でこれはかなりのアドバンテージになるんじゃないかと思います。

個人的には openpyxl を使って Excelの xlsxファイルを動的に生成してダウンロードさせられるなぁ…と思った次第です。


人気のフレームワークなので本は何冊も出ていますが、Ver.5のリリースが 2023年12月4日のため、まだ当バージョンの日本語書籍はないですね。
比較的新しいのはこれで、2023年9月23日刊なのでした。