42
50

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 REST Framework とは?(Python アプリケーション)

Posted at

この記事は Django Advent Calendar 2021 の最終日の記事です。

はじめに

はじめまして。

普段から Django を使用してWebアプリを開発しています。

今年の Django Advent Calendar 2021 も楽しく拝見させて頂きました。

今年の Django Advent Calendar では
数年前に比べて Djangoそのもの だけではなく
Django REST Framework(DRF) について言及されている記事が増えた気がします。

そこで、今年はこの記事でも Django REST Framework について記載したいと思います。

この記事が Django のより一層の普及に少しでも貢献できれば幸いです。

目次

Django とは?

一言で述べると、Python Web アプリケーションフレームワークです。

Django を使うことで Python で Web アプリケーションを簡単に作ることができます。

Django を使った Web アプリケーションを作成については以下の記事にまとめました。

現時点で、Django は Python Web アプリケーションフレームワーク の中で最も使われています。

Django REST Framework とは?

Django REST Framework (DRF) とは RESTful API 開発に特化した Django のフレームワークです。

DRF を使うことでより RESTful な Web アプリケーションを作成することができます。

なお、RESTful API とは
REST という原則を守っている HTTP 呼び出しインターフェースのことです。

「RESTful API とは?」や「REST とは?」については以下の記事が分かりやすいです。

Django REST Framewrk の特徴(Serializer)

では、そんな DRF の特徴とは何なのでしょうか?

全てを挙げ出すとキリがないのですが、
個人的に一番の特徴は Serializer にあると思います。

そこで、この記事では DRF の Serializer について解説していこうと思います。

Serializer とは?

Serializer とはざっくり説明すると、
さまざまなタイミングでデータの正当性をチェックできる機能です。

Web アプリケーションが動いている中で以下のタイミングでデータの中身を精査することができます。

  • Models にデータを格納するとき
  • Views でリクエストを処理するとき

それぞれのタイミングでの使い方を説明していきます。

Models にデータを格納するときに Serializer を使う

Django で作成したアプリケーションが動く中でデータベースに値を格納する場面は多いでしょう。

そのようなときに Serializer を使うことで、値の正当性をチェックすることができます。

Serializer 定義

from rest_framework import serializers

from api.models.user import User


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = (
            'id',
            'first_name',
            'last_name',
            'email',
            'password',
        )

このような Serializer を定義して値の格納時に呼び出すことで
必須フィールドの過不足をチェックして
おかしな値を格納することを防ぐことができます。

Serializer を使った値のバリデーション

user_serializer = UserSerializer(
    data={
        'first_name': 'hoge', 
        'last_name': 'fuga', 
        'email': 'test@example.com', 
        'password': 'XXX'
        }
)

(おまけ)動的に作成したい値を定義する

serializers.SerializerMethodField() を使うことで Models に定義した get_XXX をコールすることもできる

class UserSerializer(serializers.ModelSerializer):
    full_name = serializers.SerializerMethodField()

    class Meta:
        model = User
        fields = (
            'id',
            'name',
            'email',
            'password',
        )

    def get_value(self, obj):
        return obj.hoge()

Views でリクエストを処理するときに Serializer を使う

アプリケーションの中でリクエストを受け取って処理することがあるでしょう。

Serializerを使うことで、その Request Body の中身を精査することができます。

Serializer 定義

from rest_framework import serializers

class LoginValidator(serializers.Serializer):
    email = serializers.CharField()
    password = serializers.CharField()

上記のように Serializer を定義して、これを View 関数で使用します。

Views で Serializer を使う

from rest_framework import status
from rest_framework.response import Response

from api.serializers.validators import LoginValidator


class EmailLogin:
    def post(self, request, format=None):
        if not login_serializer.is_valid():
            return Response(
                self.build_error_response('パラメータが不正です'),
                status=status.HTTP_400_BAD_REQUEST
            )
        ...

このようにすることで不正な Request を受け取ったときのアプリケーションの挙動を定義することができます。

なお、Serializer によってバリデーションした後のデータを参照することもできます。

validate 済みのデータを参照する

email = login_serializer.validated_data['email']
address = login_serializer.validated_data.get('address')

こうすることで、安全なデータをアプリケーションの中で使うことができます。

さいごに

最後まで読んで下さり、ありがとうございます。

Django REST Framework を使ってデータの正当性をチェックすることで
より堅牢で安全なアプリケーションを作成することができます。

アプリケーションさえ作ってしまえば、
サーバやドメインを用意して世界中にサービスとして公開することができます。

なお、Webサービスの作成については以下の記事にまとめています。

それでは 2022 年も良い Django ライフを!

42
50
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
42
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?