(最終更新月:2022年3月)
✔このような方へ向けて書かれた記事となります
「Django Rest Frameworkって何?」
「Django Rest Frameworkの始め方、使い方が知りたい!」
「言葉だけだとわからない。具体例も見てみたい。」
✔当記事を通じてお伝えすること
- Django REST frameworkとは?大事な用語も合わせて解説
- Django REST frameworkの始め方をステップ・バイ・ステップで解説
- アプリで使用してる一例を公開|思ったより簡単にAPIって作れる!
特に、2つ目のサイトはReactフレームワークをフロントエンドに使い、Django REST frameworkをバックエンドとしてアプリが構成されています。
当記事の最後ではこちらのアプリで使用しているAPIを一例として解説していきます。
✔YouTube解説動画
当記事の内容は動画を見ながら進めると、約15分程度で完了します。
動画ならではの情報も解説しているので、記事と一緒にご覧ください。
動画の概要欄には、単元ごとのコードを紹介しているgithubページも載せています。
ReactとDjango Rest Frameworkを使った「QRコードアプリ」のコードと詳しい解説が、こちらのnoteで480円にて販売中。
目次は無料でご覧いただけます。
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コード作成アプリを使って説明していきます。
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を使うためには下記のステップで準備が必要です。
- パッケージのインストール
- settings.pyでの初期設定
- API用のフォルダに、適切なファイルを作成
- URLをAPI用のフォルダへ紐づけ
一例として、APIViewを使ったコードを見てきました。
ただ、なんとなくポイントだけ見ておけば良いです。
別記事でAPIViewについては詳しく解説していきます。
✔ウェブアプリを公開したい方へのおすすめ記事
☆こんなあなたにはレンタルサーバーもオススメ!
- 「HTML」「JavaScript」「PHP」「CSS」でページを作っている
- サーバーの設定や管理が少し心配
- 月額のコストをできるだけ抑えたい
「ロリポップ!レンタルサーバー」は月額99円から契約できて、Apacheも搭載している優れものです
顧客対応満足度もNo.1を獲得し昨今では安さ、使いやすさで評価が高まっています
無料でお試しもできるので、コスト、時間の節約にはもってこいです
詳しくは、こちらの公式サイトからご覧ください