検証環境

  • Python 3.10.8
  • Django 4.1.4

はじめに

Djangoは、Python用のフルスタックWebフレームワークであり、データベース操作やユーザ認証、セッション管理などのWebアプリケーション開発に必要な機能を簡単に実装できるように提供している。
Djangoは非常に多くの機能を持っており複雑なので、規模が小さいWebアプリケーションの開発には、Flaskを使用するのも良いだろう。

今回は、Djangoを使用して、簡単なWebサーバを構築する。

Djangoのインストール

pipにてDjangoをインストールする。

% pip3 install django

バージョンを確認

% python3 -m django --version
4.1.4

プロジェクトの作成

Djangoのプロジェクトを作成するには、以下のコマンドを実行する。

% django-admin startproject <プロジェクト名>

mysiteの部分は、プロジェクトの名前であり、その名前のディレクトリが作成される。
名前は基本何でもよいが、django や test という名前は、Pythonパッケージ名と衝突するので、避けるべきである。
また、うまく動作しない場合は、django-admin 実行時の問題 を参照したい。

django-admin startproject コマンドを実行すると、以下のようなファイルが自動で作成される。

% django-admin startproject mysite
% cd mysite
% ls -R
manage.py* mysite/

./mysite:
__init__.py  asgi.py      settings.py  urls.py      wsgi.py

各ファイルは次のようになっている。

ファイル名 説明
mysite/ プロジェクトが入っているディレクトリ。この名前は動作に影響しないので、好きに変更できる
mysite/manage.py Djangoに対するさまざまな操作を行うユーティリティプログラム
mysite/mysite/ プロジェクトの本当のPythonパッケージ
mysite/mysite/__init__.py このディレクトリがPythonパッケージであることを知らせる空ファイル。
これがあることによって、このディレクトリにあるPythonプログラムをimportで呼び出せる
mysite/mysite/settings.py Djangoプロジェクトの設定ファイル
mysite/mysite/urls.py サイトのURL構成を記述するファイル
mysite/mysite/wsgi.py WSGI互換Webサーバーとのエントリーポイント

アプリケーションの作成

アプリケーションを作成するには、以下のコマンドを実行する。

% python3 manage.py startapp <アプリケーション名>

実際に、mysiteディレクトリに入り、myapp というアプリケーションを作成する。

% python3 manage.py startapp myapp
% ls -R
manage.py* myapp/     mysite/

./myapp:
__init__.py  admin.py     apps.py      migrations/  models.py    tests.py     views.py

./myapp/migrations:
__init__.py

./mysite:
__init__.py  __pycache__/ asgi.py      settings.py  urls.py      wsgi.py

myappの中身は以下のようになっている。

ファイル名 説明
__init__.py このディレクトリがPythonパッケージであることを知らせる空ファイル。
admin.py データベースをweb画面上で管理できるようにするファイル
apps.py アプリケーションの管理に使用される
migrations データベースのモデルの作成や変更に使用される
models.py データベースのモデルを記述する
tests.py テストコードを記述するファイル
views.py ビューの管理をする

ビューの作成

ここでは、実際にweb画面に表示するものを作成する。
以下は、Web画面上に "Hello" と表示するだけの簡単なビューを作成するコードである。

# myapp/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello")

URLの設定

ビューを作成したが、これを表示させるには、URLを設定しなければならない。
urlの設定方法は、2つある。
ひとつは以下のように mysite/urls.py に、myapp.view をインポートする方法である。

# mysite/urls.py
from django.contrib import admin
from django.urls import path
import myapp.views

urlpatterns = [
    path(r'^admin/', admin.site.urls),
    path(r'', myapp.views.index, name='index')
]

もうひとつは、myapp/urls.py ファイルを作成し、それを mysite/urls.py でインクルードする方法である。

# myapp/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path(r'', views.index, name='index'),
]
# mysite/urls.py
from django.contrib import admin
from django.urls import include, path

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

言語設定(オプション)

mysite/settings.py から言語やタイムゾーンを変更することができる。

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'

上記を以下に変更する。

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

Djangoを動かす

実際に動かすには、プロジェクトディレクトリ内で以下のコマンドを入力する。

% ls
manage.py* myapp/     mysite/

% python3 manage.py runserver

サーバが立ち上がるので、localhost:8000 にアクセスしてみと、きちんとページが表示できていることが確認できる。

また、デフォルトでは、デバッグモードが有効になっており、エラーが出た時に詳細情報を出力する。
例えば、存在しないURLにアクセスした場合は、以下の画面になる。

これを表示したくない場合は、mysite/settings.py にある以下の記述を次のように書き換えればよい。

#DEBUG = True
#ALLOWED_HOSTS = []

DEBUG = False
ALLOWED_HOSTS = ['*']

デバッグモードを無効にして存在しないURLにアクセスした場合は以下のようになる。

参考


0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です