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

Django

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

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

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

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

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

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

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

【著者プロフィール】

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

当ブログを通じて、下記アプリの作り方、コード等を公開、解説しています

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

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

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

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

初期費用ゼロ/月9,800円でWebデザインが学べる

デザインを習得するためには、客観的なフィードバックと改善が不可欠です。

以下の記事ではこんなWebデザインスクールをご紹介しています。

  • 初期費用ゼロで、月々9,800円のみ
  • オンラインで、教材が使い放題
  • コンテストや実務案件にチャレンジして報酬もGETできる

デザナルはトップデザイナーからレビューがもらえる、格安の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_})

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

https://tools.itc-app.site/qrmaker

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

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

まとめ

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

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

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

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

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

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

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

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

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

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

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

【保存版】Apache WebサーバーでDjangoアプリを公開
Djangoが公開できる月500円~のレンタルサーバー
【初心者向け】ムームードメインで独自ドメインを取得する3ステップ
固定IPアドレスのみ単独で契約できる「インターリンク マイIP」Ubuntuコンピューターに固定IPを付与する方法

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

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

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

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

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

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

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

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

という方は必見です!

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