4章: Djangoを使ったWebアプリケーション

4.1 Djangoの導入

Djangoの概要とバージョン


Djangoは、Pythonで書かれたWebアプリケーションフレームワークの1つです。Djangoは、Webアプリケーション開発のための共通的な部分を抽象化し、開発者が高速かつ効率的にWebアプリケーションを開発することができます。Djangoは、MVC(モデル-ビュー-コントローラ)のアーキテクチャに従い、データベースとのやりとり、URLルーティング、フォームの処理、セッション管理などの機能を提供しています。

Djangoの最新バージョンは、2022年2月現在、バージョン3.2.x系列です。また、長期サポート版(LTS)として、3.2.x系列の中でも3.2.10があります。過去には、1.x系列や2.x系列もリリースされています。

Djangoのインストールと設定


Djangoのインストールと設定について、以下の手順で説明します。

1.Pythonのインストール

DjangoはPythonのフレームワークであるため、Pythonをインストールする必要があります。Pythonの公式サイトから、使用しているOSに合わせたインストーラーをダウンロードし、インストールしてください。

2.Djangoのインストール

Djangoは、Pythonのパッケージ管理システムであるpipを用いてインストールできます。ターミナルまたはコマンドプロンプトから以下のコマンドを入力して、Djangoをインストールしてください。

pip install django


インストールが完了すると、以下のようなメッセージが表示されます。

Successfully installed django-3.2.10 pytz-2021.3 sqlparse-0.4.2

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

Djangoプロジェクトを作成するには、ターミナルまたはコマンドプロンプトで、以下のコマンドを入力してください。

django-admin startproject プロジェクト名

プロジェクト名は任意の名前をつけてください。このコマンドを実行すると、プロジェクトの基本的なファイルとディレクトリが作成されます。

4.Djangoアプリケーションの作成

Djangoアプリケーションを作成するには、プロジェクトのディレクトリに移動して、以下のコマンドを入力してください。

python manage.py startapp アプリケーション名

アプリケーション名は任意の名前をつけてください。このコマンドを実行すると、アプリケーションの基本的なファイルとディレクトリが作成されます。

5.データベースの設定

Djangoでは、データベースの設定が必要です。プロジェクトディレクトリ内のsettings.pyファイルを開き、以下のようにデータベースの設定を変更してください。

python

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

この設定では、SQLiteを使用しています。他のデータベースを使用する場合は、ENGINEとNAMEを変更してください。

6. 開発用サーバーの起動

Djangoの開発用サーバーを起動するには、プロジェクトのディレクトリに移動して、以下のコマンドを入力してください。

python manage.py

Djangoの開発環境のセットアップ


Djangoの開発環境をセットアップするためには、以下の手順が必要です。

1.Pythonのインストール

DjangoはPythonのフレームワークなので、まずPythonをインストールする必要があります。Pythonのバージョンは3系を推奨します。インストール方法は、公式サイトからインストーラーをダウンロードして実行するか、OSに組み込まれているパッケージマネージャーを使用してインストールする方法があります。

2.Djangoのインストール

Pythonがインストールされたら、Djangoをインストールします。コマンドラインから以下のコマンドを実行します。

pip install Django

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

Djangoのプロジェクトを作成するために、コマンドラインから以下のコマンドを実行します。

php

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

4.アプリの作成

プロジェクトにアプリを追加するために、以下のコマンドを実行します。

php

python manage.py startapp <アプリ名>

5.データベースの設定

Djangoではデータベースを使用するために、設定が必要です。プロジェクト内のsettings.pyファイルにデータベースの設定を追加します。

6.サーバーの起動

開発用のサーバーを起動するには、以下のコマンドを実行します。

python manage.py runserver

これでDjangoの開発環境がセットアップされました。アプリケーションの開発を始めることができます。

4.2 Djangoの基本

プロジェクトとアプリの作成


Djangoにおけるプロジェクトとは、複数のアプリケーションをまとめたもので、Webアプリケーション全体の構成を定義します。一方、アプリケーションとは、プロジェクト内で独立して開発・運用される機能単位のパッケージです。

プロジェクトとアプリを作成する手順を以下に示します。

1.プロジェクトの作成

Djangoのプロジェクトを作成するには、django-admin startprojectコマンドを使用します。コマンドを実行する前に、プロジェクト名を決定し、そのディレクトリで実行する必要があります。
php

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

2.アプリの作成

プロジェクト内にアプリケーションを作成するには、python manage.py startappコマンドを使用します。コマンドを実行する前に、アプリ名を決定し、プロジェクトのルートディレクトリで実行する必要があります。

php

$ python manage.py startapp <アプリ名>

以上の手順で、Djangoのプロジェクトとアプリケーションが作成されます。

モデルの定義とマイグレーション


Djangoでは、モデルを使用してデータベースのテーブルを定義します。モデルは models.py ファイルに記述されます。モデルを定義するためには、django.db.models.Model クラスを継承する必要があります。

例えば、blog アプリケーション内で Post モデルを作成する場合、以下のように models.py ファイルに記述します。

python

from django.db import models

class Post(models.Model):
 title = models.CharField(max_length=200)
 content = models.TextField()
 created_at = models.DateTimeField(auto_now_add=True)
 updated_at = models.DateTimeField(auto_now=True)

この Post モデルでは、title、content、created_at、updated_at の4つのフィールドが定義されています。title フィールドと content フィールドは、それぞれ CharField と TextField を使用して、文字列データを格納することができます。created_at フィールドと updated_at フィールドは、それぞれ DateTimeField を使用して、日付と時刻の情報を格納することができます。

次に、データベースにテーブルを作成するために、マイグレーションを実行します。マイグレーションは、Djangoが提供するデータベーススキーマのバージョン管理システムです。

まず、以下のコマンドを使用して、マイグレーションファイルを作成します。

python manage.py makemigrations

このコマンドを実行すると、blog/migrations ディレクトリに、マイグレーションファイルが作成されます。このファイルは、データベーススキーマを変更するために必要な SQL 文を格納しています。

次に、以下のコマンドを使用して、マイグレーションを実行します。

python manage.py migrate

このコマンドを実行すると、データベースにテーブルが作成されます。

以上が、Djangoでのモデルの定義とマイグレーションの方法になります。

ビューの作成


Djangoにおけるビューは、リクエストを受けて処理を行い、レスポンスを返すための関数またはクラスのことです。以下にビューの作成方法を示します。

1.views.pyファイルの作成

まず、アプリケーションのディレクトリ内にviews.pyファイルを作成します。views.pyファイルには、ビュー関数を定義します。

2.ビュー関数の定義

ビュー関数は、views.pyファイル内に定義されます。以下は、簡単な例です。

python

from django.shortcuts import render
from django.http import HttpResponse

def my_view(request):
return HttpResponse(“Hello, World!”)

上記の例では、my_viewという関数が定義されています。この関数は、requestという引数を受け取り、HttpResponseオブジェクトを返します。HttpResponseオブジェクトには、HTTPレスポンスとして送信されるテキストが含まれます。

3.URLの設定

ビュー関数をURLにマッピングする必要があります。これを行うには、アプリケーションのurls.pyファイルにURLのパターンを定義し、ビュー関数を参照する必要があります。

python

from django.urls import path
from .views import my_view

urlpatterns = [
path(‘hello/’, my_view, name=’hello’),
]

上記の例では、path()関数を使用して、hello/というパスをmy_view関数にマッピングしています。name引数は、ビューに名前を付けるためのもので、URL逆引きなどで使用されます。

これでビュー関数を定義してURLにマッピングする方法がわかりました。ビュー関数内でデータベースを操作したり、他のアプリケーションやAPIと通信したりすることができます。

テンプレートの作成


Djangoでは、MVCのV(ビュー)に該当する部分がテンプレートです。テンプレートは、HTML、CSS、JavaScriptを用いてウェブページを構築するためのファイルです。ビューから渡されたデータを埋め込んで動的なページを作成することができます。

テンプレートの作成手順は以下の通りです。

  1. テンプレートを配置するアプリのディレクトリ内にtemplatesディレクトリを作成します。
  2. templatesディレクトリ内に、テンプレート用のHTMLファイルを作成します。
  3. テンプレート内で動的に変化する部分を、Djangoのテンプレート言語を用いて記述します。

例えば、以下のように記述します。

html

<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>My Blog</title>
</head>
<body>
<h1>Welcome to My Blog!</h1>
<ul>
{% for post in posts %}
<li><a href=”{% url ‘post_detail’ post.pk %}”>{{ post.title }}</a></li>
{% endfor %}
</ul>
</body>
</html>

上記の例では、{% for %}タグを使って、postsという変数に格納されたブログ記事の一覧を表示しています。また、{% url %}タグを使って、記事の詳細ページへのリンクを作成しています。

テンプレート言語には他にも、if文、コメント、フィルターなどがあります。Django公式ドキュメントに詳細が記載されているので、必要に応じて参照してください。

4.3 Djangoの高度な機能

フォームの作成


Djangoでは、フォームを作成するための便利な機能が提供されています。フォームは、ユーザーからの入力を取得するために使用されます。フォームを作成するためには、formsモジュールを使用します。

まず、forms.pyというファイルを作成し、以下のように記述します。

python

from django import forms

class ContactForm(forms.Form):
 name = forms.CharField(max_length=255)
 email = forms.EmailField()
 message = forms.CharField(widget=forms.Textarea)

この例では、ContactFormというフォームを定義しています。name、email、messageというフィールドを持ち、それぞれのフィールドに対して、forms.CharFieldやforms.EmailFieldを使用して、フィールドの型を指定しています。

また、max_lengthやwidgetといったオプションを指定することもできます。

これで、フォームが定義されました。このフォームをビューで使用するためには、views.pyでフォームをインスタンス化し、テンプレートに渡します。

python

from django.shortcuts import render
from .forms import ContactForm

def contact(request):
 if request.method == ‘POST’:
  form = ContactForm(request.POST)
   if form.is_valid():
   # フォームが正しく入力された場合の処理
    pass
 else:
  form = ContactForm()

 return render(request, ‘contact.html’, {‘form’: form})

上記の例では、POSTメソッドでリクエストが送信された場合にフォームをバリデーションし、入力された値が正しい場合は処理を実行するようになっています。

また、GETメソッドでリクエストが送信された場合には、空のフォームを表示するようになっています。

テンプレートでは、formオブジェクトを使用してフォームを表示することができます。

html

{% extends ‘base.html’ %}
{% block content %}
<h1>Contact Us</h1>
<form method=”post”>
{% csrf_token %}
{{ form.as_p }}
<button type=”submit”>Send</button>
</form>
{% endblock %}

上記の例では、{{ form.as_p }}というテンプレートタグを使用して、フォームを表示しています。

これで、Djangoでフォームを作成する方法がわかりました。

認証機能の実装


Djangoでは、認証機能を簡単に実装するためにdjango.contrib.authというアプリケーションが用意されています。これを使うことで、ユーザーの認証や認可、ログインやログアウトなどの機能を実装することができます。

django.contrib.authアプリケーションを使った認証機能を実装するには、以下の手順が必要です。

  1. django.contrib.authアプリケーションをインストールする
  2. ログインビューを作成する
  3. ログアウトビューを作成する
  4. 認証が必要なページにデコレーターを追加する

まず、django.contrib.authアプリケーションをインストールします。INSTALLED_APPSの設定に’django.contrib.auth’を追加します。

python

#settings.py

INSTALLED_APPS = [
# …
‘django.contrib.auth’,
# …
]

次に、ログインビューを作成します。Djangoには、django.contrib.auth.viewsモジュールにログインビューが用意されています。これを使うことで、ログインフォームの表示や認証処理を簡単に実装することができます。

python

#urls.py
from django.contrib.auth.views import LoginView

urlpatterns = [
 # …
  path(‘login/’, LoginView.as_view(template_name=’registration/login.html’), name=’login’),
 # …
]

上記の例では、LoginViewクラスを使ってログインビューを作成しています。template_name引数で、使用するテンプレートファイルを指定しています。

次に、ログアウトビューを作成します。django.contrib.auth.viewsモジュールにログアウトビューが用意されています。これを使うことで、ログアウト処理を簡単に実装することができます。

python

#urls.py
from django.contrib.auth.views import LogoutView

urlpatterns = [
 # …
  path(‘logout/’, LogoutView.as_view(next_page=’login’), name=’logout’),
 # …
]

上記の例では、LogoutViewクラスを使ってログアウトビューを作成しています。next_page引数で、ログアウト後に遷移するページを指定しています。

最後に、認証が必要なページに@login_requiredデコレーターを追加します。これにより、未ログインの場合はログインページにリダイレクトされるようになります。

python

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

@login_required
def my_view(request):
    # ログインが必要な処理
    ...

@login_requiredデコレーターを使用することで、my_view関数にアクセスする前に、ユーザーがログインしているかどうかを確認します。もしログインしていなければ、ユーザーをログインページにリダイレクトします。ログインしている場合は、my_view関数を実行します。

APIの実装


APIの実装には、Django REST Framework (DRF)と呼ばれるDjangoの拡張ライブラリを使用することが一般的です。DRFは、RESTful APIを簡単に実装するための機能を提供しています。

以下は、簡単なAPIを実装するための手順です。

1.DRFのインストール

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

pip install djangorestframework

2.シリアライザーの定義

シリアライザーは、DjangoのモデルをJSONやXMLなどの形式に変換するためのクラスです。以下は、モデルをシリアライズするシリアライザーの例です。

python

from rest_framework import serializers
from .models import MyModel

class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ‘all

3.ビューの定義

ビューは、APIのエンドポイントにアクセスするための関数やクラスです。以下は、モデルの一覧を取得するためのビューの例です。

python

from rest_framework import generics
from .models import MyModel
from .serializers import MyModelSerializer

class MyModelList(generics.ListCreateAPIView):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer

4.URLの定義

APIのエンドポイントとビューを結びつけるために、URLを定義します。以下は、ビューを’/mymodels/’エンドポイントにマッピングするURLの例です。

python

from django.urls import path
from .views import MyModelList

urlpatterns = [
path(‘mymodels/’, MyModelList.as_view()),
]

以上の手順で、簡単なAPIを実装することができます。さらに詳しい情報は、公式ドキュメントを参照してください。

コメントを残す

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