0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Django】MVT Pattern

Posted at

1. Django

Django を一言で表すと、Python で構成された Web Application Framework である。Framework が「枠組み」「骨組み」という意味だから、まとめると、Django は Python で Web Application を作成する際に使用できる Framework (枠組み) ということになる。

2. MVT Pattern

Django は、MVT Pattern を採用している。MVT は、それぞれ ModelTemplateView を意味する。これらの関係性を図で表すと以下のような形になる。

Screenshot 2024-08-01 at 22.09.36.png

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 との通信

Screenshot 2024-08-01 at 22.02.57.png

3-1. URLs

Client からの request は Front-End を通って urls.py に渡される。urls.py では受け取った URL に基づいて、どの View 関数又は、クラスを呼び出すかを決める。この作業は URL パターンマッチングによって行われる。

Sample code
urls.py
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
views.py
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
serializers.py
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
models.py
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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?