【実例付】Django APIViewとは?書き方まで丁寧に解説

※本サイトにはプロモーション・広告が含まれています。

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

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

「Django REST frameworkのAPIViewってなに?」

「APIViewの書き方が知りたい!」

「やり方はわかったけど、実際のコードをみたい。実例は?」

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

  • Django REST frameworkのAPIViewってなに?
  • APIViewの書き方|覚えておきたい2つのメソッドについて
  • APIViewの実例を見てみる

icon
icon

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Django REST frameworkのAPIViewってなに?

Django REST frameworkとは?

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

詳しくはこちらでどうぞ↓

その中で基本的なビュークラスのうちの一つがAPIViewになります。

他のビューと並べて特長を見ていきます。

Django REST frameworkのAPIViewについて

そもそも、Django REST frameworkのviewは大きく2種類用意されています。

  1. データベースと連携なし|ファンクションビュー、クラスベースビュー
  2. データベースと連携あり|ジェネリックビュー、ビューセット

簡単にそれぞれ見ていきながら、APIViewについての理解を深めていきましょう。

データベースと連携なし|ファンクションビュー、クラスベースビュー

APIViewは、データベースと連携のないクラスベースビューに分類されます。

コードによって連携させることも可能で、自由度が高いというメリットがあります。

ファンクションビューでは、api_viewというデコレータを使うことで、シリアライズ化したデータを返すことが可能です。

データベースと連携あり|ジェネリックビュー、ビューセット

一般的なDjangoのクラスベースビューでも「CreateView」「UpdateView」などCRUDにまつわるクラスベースビューに近いビューがジェネリックビューになります。

データベースとの連携を前提としたジェネリックビューは下記の通りです。

  • CreateAPIView
  • ListAPIView
  • RetrieveAPIView
  • DestroyAPIView
  • UpdateAPIView
  • ListCreateAPIView
  • RetrieveUpdateAPIView
  • RetrieveDestroyAPIView
  • RetrieveUpdateDestroyAPIView

また、こうしたCRUDにまつわるジェネリックビューをまとめた役割をもつViewsetsもデータベースと連携があるビューの一つと言えます。

APIViewの書き方|覚えておきたい2つのメソッドについて

APIViewの良いところは、自由度が高いところです。

主にはフロントエンド側からの①GETメソッド②POSTメソッドの2タイプのリクエストに対して何を返すかを指定することができます。

get関数

def get(self, request, format=None):
        #何かしらの処理を記述します。
        return Response("返したい値を記述")

GETメソッドによるアクセスの際に返す値をResponseコンストラクタで処理し返します。

post関数

def post(self, request, format=None):
        #何かしらの処理を記述します。
        return Response("返したい値を記述")

POSTメソッドによる送信が行われた際に特定の値を返します。

テンプレート

Responseの生成など、テンプレート化しておくと便利です。

下記をコピペし、不要なメソッドは削除、必要なメソッド内で適切な処理を記述することで簡単にAPIViewを使いこなせます。

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions

class ListUsers(APIView):
    
    #認証システムを指定します。デフォルトの通りの場合は不要。
    authentication_classes = [authentication.TokenAuthentication]
    
    #アクセス制限を指定します。デフォルトの通りの場合は不要。
    permission_classes = [permissions.IsAdminUser]

    def get(self, request, format=None):
        #こちらに処理を記述します。
        return Response("戻り値")

    def post(self, request, format=None):
        #こちらに処理を記述します。
        return Response("戻り値")

このテンプレートを使った具体的な例を見てみましょう。

APIViewの実例を見てみる

こちらの記事でもコードだけ紹介しています。

自作アプリ「QRコード作成アプリ」の実際のコードになります。

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_})

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

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

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

こちらで実際に使用できます。

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

フロントエンドはReactで作りました。

Webデザインについてはよくわからないので、詳しい方がいましたら最下部のTwitterボタンよりご連絡お待ちしてます。

まとめ

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

Django REST frameworkのビューには、大きく2タイプのビューが用意されています。

  • データベースと連携なし|ファンクションビュー、クラスベースビュー
  • データベースと連携あり|ジェネリックビュー

この中でも、APIViewはデータベースと連携がないクラスベースビューになります。。

自由度が高いメリットがあり、主なメソッドは下記の2つです。

  1. getメソッド
  2. postメソッド

それぞれ、フロントエンド側からどちらのリクエストを想定するかで必要な処理を記述します。

以上、Django REST frameworkのAPIViewについてでした。

「ビューセットについて詳しく知りたい」という方はこちらの記事もどうぞ↓

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