Agile育成ブログ
未来を変える喜びを
Django Rest Framework

Django Rest Framework[jobboard]


Warning: count(): Parameter must be an array or an object that implements Countable in /home/xs638785/agile-software.site/public_html/wp-content/plugins/rich-table-of-content/functions.php on line 490

requirements.txt

Django~=2.2.10
djangorestframework~=3.11.0

プロジェクトの作成

django-admin startproject job_board .

データベースセットアップ

python3 manage.py migrate

サーバー起動

python3 manage.py runserver

アプリケーション作成

python3 manage.py startapp jobs

python3 manage.py createsuperuser

settings.pyの修正

INSTALLED_APPS に追加します。

INSTALLED_APPS = [   
    'rest_framework',
    'jobs'
]
REST_FRAMEWORK = {
    'PAGE_SIZE':4,
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination'
}

models.py

DRFのモデルはDjangoのモデルと同じように使います。

from django.db import models

# Create your models here.

class JobOffer(models.Model):
    company_name = models.CharField(max_Length=100)



    def __str__(self):
        return self.company_name

de

モデルの変更部分のマイグレーションファイルを作成

python3 manage.py makemigrations

de

マイグレーションファイルの内容をデータベースに反映してテーブルを作成・変更する。

python3 manage.py migrate

urls.py

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', admin.site.urls),
]

jobsフォルダーにapiフォルダーを作成

serializers.pyの作成

複雑なデータをJson形式のフォーマットに変換
入力データとオブジェクトの相互変換

具体的にはユーザーが入力したパスワードをキャッシュ化してデータベースに登録する
データベースの戻り値を適切なフォーマットにしてレスポンスとして返す

metaクラスのmodelに対象のモデル、fieldsに利用するフィールド名をlistまたはtuple形式で定義する必要があります。すべてのフィールドを利用する場合は「__all__」とします。

デシリアライズとは入力データを元になんらかのオブジェクトを作成する(あるいはそのためにデータを適した形にする)ことです。

from rest_framework import serializers
from jobs.models import JobOffer

class JobOfferSerializer(serializers.ModelSerializer):
    class Meta:
        model = JobOffer
        fields = '__all__'
Serializerの種類
  • modelSerializer:JSONの入出力構造がモデルのフィールド定義をベースにしたものになる場合
  • ListSerializer:複数のリソースを扱う場合
  • Serializer:モデルに依存しない自由な形式のJSONを入出力するAPIを作成する場合

View

Serializerの種類
  • APIView:リクエストのHTTPメソッドに対応する取得:「get」登録:「post」更新:「put」一部変更:「patch」削除:「delete」
  • CreateAPIView:
  • ModelViewSet:単一モデルのCRUDを処理するREST APIを実装

汎用APIView

クラス一覧GET詳細GET登録POST更新PUT一部更新
PATCH
削除
DELETE
ListAPIView
RetrieveAPIView
ListCreateAPIView
CreateAPIView
UpdateAPIView
DestroyAPIView
RetrieveUpdateAPIView
RetrieveDestroyAPIView
RetrieveUpdateDestroyAPIView
from django.db.models.query import QuerySet
from rest_framework import generics
from jobs.models import JobOffer
from jobs.api.serislizers import JobOfferSerializer


class ListView(generics.ListCreateAPIView):
    queryset = JobOffer.objects.all().order_by('-id')
    serializer_class = JobOfferSerializer


class DetailView(generics.RetrieveUpdateDestroyAPIView):
    querySet = JobOffer.objects.all()
    serializer__class = JobOfferSerializer

queryset

モデルオブジェクトやモデルオブジェクトの一覧を取得するために「queryset」というクラス変数の定義が必要になる。

ModelViewSet

クラス一覧GET詳細GET登録POST更新PUT一部更新
PATCH
削除
DELETE
ModelViewSet
ReadOnlyModelViewSet

サーバー起動

python3 manage.py runserver

You cannot copy content of this page