RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

DjangoでWebアプリケーションを作成してみる

はじめまして。d-t-kong です。第二開発部・楽楽販売開発課に所属しております。

今回は Python のWebアプリ開発用のフレームワークである Django の環境構築から、テンプレートを表示するまでの手順をまとめましたので、ご紹介させていただきます。
今回は以下のセクションで説明します。

Django の特徴

DjangoPython のWebアプリケーション開発用フレームワークです。
Djangoの特徴として主に以下が挙げられます。

  • 以下の機能が標準搭載

    • Django 管理サイト
    • ユーザ認証
    • セッション管理
    • キャッシュシステム
    • ページング
    • データのシリアライズ
  • Python の豊富なライブラリを利用できる

  • MTV パターンを採用

環境構築

では、早速Django の環境構築を進めていきます。
はじめに、今回の記事で使用する実行環境は以下となります。

本節は以下の手順で準備を進めます。

  1. Djangoをインストール
  2. Djangoプロジェクトを作成
  3. 開発サーバを立ち上げる
  4. データベースのセットアップ
Django をインストール

まず、pip コマンドを使って Django をインストールします。

% pip install django 
Django プロジェクト作成

Django をインストールできたら、まずDjango プロジェクトを準備します。

Djangoをインストールすると、
django-adminというコマンドを使用することができるようになります。
この コマンドを使って新規プロジェクトを作成することができます。
今回はhelloWorldProjectという名前のプロジェクトを作成します。

% django-admin startproject helloWorldProject

コマンドを実行することで生成されたディレクトリは以下のようになります。

.
┣ hello_world_project
┃   ┠─ __init__.py
┃   ┠─ asgi.py
┃   ┠─ settings.py
┃   ┠─ urls.py
┃   ┗─ wsgi.py
┗━━━ manage.py

各ファイルの役割は以下のようになります。

  • __init__.py:[プロジェクト名]フォルダが Python のパッケージであることを証明する。中身派から。
  • setting.py:Django プロジェクトの様々な設定を記述する。
  • manage.py:django-adminコマンドを使用する際のショートカットスクリプト。開発サーバの立ち上げ、マイグレーションなどに使う。
  • urls.py:ルーティングについて記述する。
  • asgi.py、wsgi.py:非同期処理の実装などで使うファイル。

開発用サーバーを立ち上げる

プロジェクトが作成できたら開発用サーバを立ち上げてみましょう。
以下のコマンドを実行するとサーバーを起動することができます。

% python3 manage.py runserver

コマンドを実行したら、http://127.0.0.1:8000/ よりトップページにアクセスできます。
以下のトップページにアクセスできたら立ち上げ成功です。

Django のトップページの表示

データベースをセットアップする

次は、データベースの設定を行います。
まず、データベースの設定をsetting.py の以下の部分で確認してみます。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',  
        'NAME': BASE_DIR / 'db.sqlite3',  
    }
}

ENGINEは、使用するデータベースのエンジンを指定します。
Django のデフォルトは、sqlite3 が指定されています。
NAMEは、参照するファイルを指定します。

では、実際にデータベースを用意します。
Djangoではデータベースの作成や変更を加える際に、マイグレーションという機能を利用します。
Django ではデータベースの定義にどのような変更があったのかを表すマイグレーションファイルを生成します。
セッション管理やユーザ管理といった機能を提供するため、いくつかのモデル定義とマイグレーションファイルがデフォルトで存在します。

manage.py migrateコマンドを実行することで、これらのマイグレーションファイルをデータベースに反映させる事ができます。

% python3 manage.py migrate

Django でアプリケーションを作る

ここまでで、Django でアプリケーションを作るまでの下準備が整いました。
今回は試しに、Hello World と表示するアプリケーションを作成します。

本節は以下の手順で進めていきます。

  1. 新規アプリケーションを作成
  2. ルーティング設定
  3. view 関数を定義
  4. テンプレートを設定

新規アプリケーションを作成

Djangoでは、Webサイトの機能をアプリケーション(apps)ごとに分割します。
デフォルトで設定されているアプリケーションはsettings.pyで確認することができます。

hello_world_project/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',           # 管理画面機能を持つアプリケーション
    'django.contrib.auth',                # 認証機能をもつアプリケーション
    'django.contrib.contenttypes',  # Content-Type に関する機能をもつアプリケーション
    'django.contrib.sessions',          # セッション管理の機能を持つアプリケーション
    'django.contrib.messages',       # フラッシュメッセージ のためのアプリケーション
    'django.contrib.staticfiles',        # 静的ファイル(CSS や JavaScript)に関係する機能を持つアプリケーション
]

このように、INSTALLED_APPSの中には既にいくつかアプリケーションが登録されています。
Djangoに標準で提供されている認証機能や管理者機能などもここで定義されています。

新規にアプリケーションを作る場合は、以下のコマンドを実行します。
今回はサンプルとしてhelloworldappという名前のアプリケーションを作成します。

% python3 manage.py startapp helloWorldApp

このコマンドを実行すると helloWorldApp アプリケーションが作成されます。
プロジェクトファイルは以下のような構成になります。

.
┣  helloWorldProject
┃   ┠─ (略)
┣━━━ manage.py
┗━━━ helloWorldApp
        ┠─ __init__.py
        ┠─ admin.py  // 管理画面の設定を記述
        ┠─ apps.py   // アプリケーションの様々な状態にフックする処理を記述
        ┠─ migrations/  // マイグレーションファイルを作成
        ┠─ models.py   // データベースのスキーマを定義
        ┠─ tests.py  // テストを記述
        ┗─ views.py   // ビューを記述

追加することで、アプリケーションとして使用することができます。

helloWorldProject.settings.py

INSTALLED_APPS = [
    ・
    ・
    ・
 # 追記
 ’hellowWorldApp’ 
]

ルーティングを設定

次に、画面にアクセスするためのルーティングを設定します。
まず、hello_world_project/urls.pyを編集します。

helloWorldApp/urls.py

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

urlpatterns = [
    # ルーティングを追加
    path('',include('hello_world.urls')),
    
    path('admin/', admin.site.urls),
]

次に、hello_world/urls.pyを新規に作成し、localhost:8000/hello_world/にアクセス時に後ほど定義するhelloWorldApp/views.pyのindex() 関数を呼び出すように設定します。

view関数を定義

helloWorldApp/views.pyindex()関数を以下のように定義します。

helloWorldApp/views.py

from django.shortcuts import render

# 以下を追加
def index (request):
    return render(request,'hello_world/index.html')

index()関数が呼び出されたら、templates/index.html を参照するように設定しています。

これはrender () 関数の第二引数にテンプレート(htmlファイル)を指定する場合、デフォルトでは templatesディレクトリを参照するように設定されているからです。
しかし、アプリケーション作成時にtemplatesディレクトリは作成されていなかったので、新規に作成する必要があります。

テンプレートを作成

次に、テンプレートを作成します。
ここでは、views.pyで呼び出すテンプレートファイルを作成します。
まず、helloWorldApp/配下にtemplatesディレクトリを新規作成し、その配下にhello_worldディレクトリを作成します。

hello_worldディレクトリ配下にindex.htmlを新規作成し、以下の記述を追記します。

helloWorldApp/templates/hello_world/index.html

<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>Hello World</title>
    </head>
    <body>
        <h1>Hello World</h1>
    </body>
</html>

最後に、% python3 manage.py runserver で開発用サーバを立ち上げ、http://localhost:8000/hello_worldにアクセスします。
テンプレートで指定した画面が表示できていれば成功です!

最後に

最後までご覧いただきありがとうございます。
今回はDjangoの環境構築から基本的な画面の表示方法までをご紹介しました。
個人的に、今までの経験からMTCパターンのほうが馴染み深かったので、Django の MTV パターンに慣れるまでに時間がかかりました。

今回は環境構築など初歩的な内容のものをお届けしましたが、Django には管理サイト機能やユーザ認証機能など便利な機能がたくさんあるので、機会を見つけてDjangoに関する記事をまた発信していきたいです。


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.