Django REST framework入門|定義から使い方まで

Django

(最終更新月:2022年3月)

✔このような方へ向けて書かれた記事となります

「Django Rest Frameworkって何?」

「Django Rest Frameworkの始め方、使い方が知りたい!」

「言葉だけだとわからない。具体例も見てみたい。」

✔当記事を通じてお伝えすること

  • Django REST frameworkとは?大事な用語も合わせて解説
  • Django REST frameworkの始め方をステップ・バイ・ステップで解説
  • アプリで使用してる一例を公開|思ったより簡単にAPIって作れる!

【著者プロフィール】

profile_icon
【Python歴】11年 x 【Django歴】10年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです。

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです。

特に、2つ目のサイトはReactフレームワークをフロントエンドに使い、Django REST frameworkをバックエンドとしてアプリが構成されています。

当記事の最後ではこちらのアプリで使用しているAPIを一例として解説していきます。

icon
icon

ReactとDjango Rest Frameworkを使った「QRコードアプリ」のコードと詳しい解説が、こちらのnoteで480円にて販売中。

目次は無料でご覧いただけます。

【React×Django】QRコードアプリの全コードを徹底解説

Django REST frameworkとは?大事な用語も合わせて解説

Django REST frameworkとは?

Django REST frameworkとは、簡単にWeb APIの構築ができるDjangoユーザーへ向けたPythonパッケージになります。(公式ドキュメントはこちら※全て英語になります

Django REST frameworkによって、データベース内等のデータをシリアル化し、他のフレームワークが読み取れる形でデータの受け渡しができます。

「API?」「 シリアル化?」

わからない方は下記をご覧ください。

大事な用語解説

わかる方は飛ばしてください。

もしまだわからないものがあれば一読すれば十分です。

フロントエンド、バックエンドについて

フロントエンド(「front end」)とは、ユーザーとデータのやりとりを行う側のことを言います。

ブラウザで表示される部分など、実際にユーザーの目に触れるパートのことです。

ホームページの場合フロントエンドで使用される主な言語は、HTML、CSS、JavaScriptになります。

バックエンド(「back end」)とは、Webサーバーやデータベースのやりとりを行う側のことを言います。

実際にユーザーの目には触れませんが、フロントエンドでユーザーが要望したことをWebサーバー、データーサーバー間でやりとりをします。

APIについて

APIとは、Application Programming Interfaceの略称で、複数のアプリケーション同士を連結、結合する役割を担っています。

APIを使うことで、複数のプログラムで機能やデータを共有することができます

例えば、バックエンドをDjango REST frameworkによりAPI化することで、フロントエンドとしてのアプリケーション(React等で作られたアプリやiOSアプリなど)から、バックエンド側のデータへアクセスすることが可能になります。

実際には、Django REST frameworkを使うことで、バックエンド側のデータをシリアライズ化し、別のアプリケーションへ渡すという作業が行われています。

シリアライズ・シリアライズ化とは?

シリアル化、もしくはシリアライズ(serializer)とは、データベース内に保存されているデータなどを文字列化バイト列化することを言います。

データをシリアライズ化することで、フロントエンド側のアプリケーションでデータが容易に読み込めるようになります。

Django REST frameworkの始め方をステップ・バイ・ステップで解説

Django REST frameworkは、WebAPIを簡単に構築できるツールです。

まずは、使用するための準備をしていきます。

インストール

使用している環境内で、pipを使ってインストールします。

pip install djangorestframework

初期設定

settings.pyで下記の通り追記します。

INSTALLED_APPS = [
    #...
    'rest_framework',
]

API用のフォルダを作成

必須ではありませんが、API用のフォルダを作っておくと便利です。

フォルダツリー

nippo(appフォルダ)
├── ....
├── api
│   ├── urls.py
│   └── views.py
├── ....

apiフォルダには、「urls.py」と「views.py」を作っておきます。(場合によっては、「serializers.py」を作る必要もあります。)

メインのurls.py

URLをAPI用のフォルダ内のurls.pyと紐づけておきます。

urlpatterns = [
    #...
    path('api-auth/', include('rest_framework.urls')),
    path("api/nippo/", include('nippo.api.urls))
]

以上で、インストールから初期設定まで完了です。

簡単なAPIを構築してみましょう。

アプリで使用してる一例を公開|思ったより簡単にAPIって作れる!

私の自作しているWebアプリのうち、QRコード作成アプリを使って説明していきます。

Fun Tools
ReactとDjangoで作成したWebアプリです。便利なツールを揃えているので、ぜひ立ち寄ってみてください。作り方はブログで紹介しています!

views.py

こちらがアプリのAPI側のコードです。

from rest_framework.response import Response
from rest_framework.views import APIView
from tools.models import QRcode
from django.conf import settings

from utils import domain_handler
import qrcode

class CreateQRView(APIView):
    def post(self, request, format=None):
        value = request.data["value"]
        media_root = settings.MEDIA_ROOT
        removed_text = value.replace("/", "").replace(":", "").replace("@", "")
        file_path = str(media_root) + f"/qr/{removed_text}.png"
        img = qrcode.make(value)
        qr_img_path = img.save(file_path)
        obj, created = QRcode.objects.get_or_create(value=value, image=file_path)
        media_path = domain_handler.get_absolute_media_root()
        path_ = media_path + f"qr/{removed_text}.png"
        return Response({"filepath": path_})

全て理解する必要はありません。

API構築に必要な部分だけ抜粋します。

from rest_framework.response import Response
from rest_framework.views import APIView

#割愛してます。

class CreateQRView(APIView):
    def post(self, request, format=None):
        #割愛してます。
        return Response({"filepath": path_})

ここでは、「APIView」というクラスベースビューを継承し、APIを構築しています。

from rest_framework.views import APIView
class CreateQRView(APIView):
    #....

APIViewについて詳しく知りたい方はこちらをどうぞ↓

APIViewでは、getメソッド、postメソッドを使い、それぞれのメソッドでリクエストがあった際の処理を記述します。

ここではpostメソッドのみ使用します。

    def post(self, request, format=None):
#割愛

postの引数は、「self」「request」「format=None」としておきましょう。

Responseコンストラクタを使い、シリアライズ化したデータをreturnします。

from rest_framework.response import Response

#...割愛してます。

    return Response({"filepath": path_})#パスには値が格納されています。

urls.py

from django.urls import path

from tools.api.views import (
                        CreateQRView,
                        )

urlpatterns = [
    path("qrmaker/", CreateQRView.as_view()),
]

URLの設定は通常のDjangoアプリと変わりません。

APIに直接アクセスしてみる

POSTメソッドのみ許可しているのでGETメソッドによるアクセスではエラーメッセージが出ます。

また、seralizerを使っていないので、良いAPIではありませんがひとまず動くので良しとします。

実際には直接アクセスして使う訳ではなく、フロントエンド側からのリクエスト受け取り、レスポンスを返す役割を担っています。

以上、簡単なアプリでの一例でした。

まとめ

当記事の内容をまとめます。

Django REST frameworkとは、カンタンにWeb APIの構築ができるDjangoユーザーへ向けたPythonパッケージになります。(公式ドキュメントはこちら※全て英語になります)

Django RESET frameworkを使うためには下記のステップで準備が必要です。

  1. パッケージのインストール
  2. settings.pyでの初期設定
  3. API用のフォルダに、適切なファイルを作成
  4. URLをAPI用のフォルダへ紐づけ

一例として、APIViewを使ったコードを見てきました。

ただ、なんとなくポイントだけ見ておけば良いです。

別記事でAPIViewについては詳しく解説していきます。

当記事をご覧の方の中にも「そろそろウェブでアプリを公開してみたいなぁ」「どうやって公開するの?」という方もいらっしゃるのではないでしょうか?
下記の通り、別記事ではDjangoアプリの公開方法公開までの準備についての解説をしていますのでご覧ください!

「Webアプリを公開したい!」という方へ

【保存版】Apache WebサーバーでDjangoアプリを公開
Djangoが公開できる月500円~のレンタルサーバー
【初心者向け】ムームードメインで独自ドメインを取得する3ステップ
【実体験】マイIPの使い方を解説|固定IPアドレスを取得・設定する

☆こんなあなたにはレンタルサーバーもオススメ!

  • HTML」「JavaScript」「PHP」「CSS」でページを作っている
  • サーバーの設定や管理が少し心配
  • 月額のコストをできるだけ抑えたい

当ブログでも利用しているロリポップ!レンタルサーバー月額99円から契約できて、Apacheも搭載している優れものです

顧客対応満足度もNo.1を獲得し昨今では安さ、使いやすさで評価が高まっています

無料でお試しもできるので、コスト、時間の節約にはもってこいです

詳しくは、こちらの公式サイトからご覧ください

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

タイトルとURLをコピーしました