1. Django
Django を一言で表すと、Python で構成された Web Application Framework である。Framework が「枠組み」「骨組み」という意味だから、まとめると、Django は Python で Web Application を作成する際に使用できる Framework (枠組み) ということになる。
2. MVT Pattern
Django は、MVT Pattern を採用している。MVT は、それぞれ Model、Template、View を意味する。これらの関係性を図で表すと以下のような形になる。
2-1. Model
Model は、Django Framwork におけるデータベースのテーブルを Python クラスで表現するものである。つまり、Model モジュールを利用して models.py にクラスを作成し、その属性を記入すると、データベース内の一つのテーブルと同じ形式になる。
2-2. Template
Template は、ユーザが直接アクセスできる html のようなページのことで、Web Application におけるコンテンツ表示機能を担当する部分となる。Template には、主に以下のような機能がある。
- コンテンツを表示する。
- ユーザからの request を受け付ける。
- ユーザの request に対する response を表示する。
2-3. View
Template と Model の間でデータの流れをコントロールする役割を担当する。Template から渡されたユーザの request を受け付け、受け付けた request の内容に応じて Model に対してデータの操作 (DB へのデータ登録、更新、削除、参照など) を依頼する。その後、表示させたいデータを目的に合う形式に加工したうえで、Template へ渡す。
※ MVC モデルの V (View) とは異なるため、混同しないように注意する必要がある。
3. Front-End との通信
3-1. URLs
Client からの request は Front-End を通って urls.py に渡される。urls.py では受け取った URL に基づいて、どの View 関数又は、クラスを呼び出すかを決める。この作業は URL パターンマッチングによって行われる。
Sample code
from django.urls import path
from .views import my_view
urlpatterns = [
path('my-url/', my_view, name='my_view'),
]
3-2. Views
Views では、URL パターンにマッチする HTTP request を受け取った後、必要な処理を行った上で request を Front-End に返す。その際に、Serializer を使ってデータをシリアル化、又は、逆シリアル化することもできる。
Sample code
from django.http import JsonResponse
from .models import MyModel
from .serializers import MyModelSerializer
def my_view(request):
if request.method == 'GET':
objects = MyModel.objects.all()
serializer = MyModelSerializer(objects, many=True)
return JsonResponse(serializer.data, safe=False)
3-3. Serializer
Serializer は、Django REST framework で提供される機能で、データモデルの object を JSON 形式に変換したり、逆に、JSON 形式をデータモデルの object に変換したりする。
Sample code
from rest_framework import serializers
from .models import MyModel
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = '__all__'
3-4. Model
Model は、Django で Database table を定義するのに使用される。各 Model の class は Database の table に該当し、class の field は table の column を表す。また、Model は Database との CRUD (Create, Read, Update, Delete) 作業を行う method を含める。
Sample code
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name

