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