1732332890
2024-11-23 03:29:00
シリアライザークラス
Django REST フレームワーク (DRF) では、シリアライザー クラスが複雑なデータ型 (Django モデルやクエリセットなど) とネイティブ Python データ型 (辞書など) の間の変換を処理します。これにより、JSON、XML、またはその他のコンテンツ タイプに簡単にレンダリングできます。 。また、逆シリアル化も処理します。つまり、受信した JSON またはその他の形式を Python データに変換し、検証します。
1.フィールド
シリアライザー フィールドは、Django フォームと同様に定義されます。期待するデータのタイプとその処理方法を宣言します。例えば
#serializers.pyfrom rest_framework import serializers
class BookSerializer(serializers.Serializer):
title = serializers.CharField(max_length=100)
author = serializers.CharField(max_length=100)
published_date = serializers.DateField()
このシリアライザーは、title、author、およびpublished_dateフィールドを処理し、それらをstrやdateなどのPythonタイプにマップします。
2. 検証
シリアライザーはフィールドの検証を自動的に提供します。個々のフィールドまたはオブジェクト全体に対してカスタム検証ロジックを定義することもできます。
フィールドレベルの検証
#serializers.py
from rest_framework import serializersclass BookSerializer(serializers.Serializer):
title = serializers.CharField(max_length=100)
author = serializers.CharField(max_length-100)
published_date = serializers.DateField()
def validate_title(self, value):
if 'Django not in value:
raise serializers.ValidationError( "Book title must contain 'Django".")
return value
フィールドレベルの検証を利用して、個々のフィールドの検証を追加できます。
3. 方法
Serializer クラスには、データのシリアル化および逆シリアル化のプロセスを処理するいくつかの便利なメソッドが含まれています
#serializers.pyfrom rest_framework import serializers
class BookSerializer(serializers.Serializer):
title = serializers.CharField(max_length=100)
published_date = serializers.DateField()
author = serializers.CharField(max_length=100)
def to_representation(self, instance):
representation = super().to_representation(instance)
representation['custom_field'] = 'Custom Data'
return representation
4. シリアル化と逆シリアル化
Serializer クラスは、シリアル化と逆シリアル化に役立ちます。これは、Python オブジェクト (モデルなど) をレンダリング可能な形式 (JSON など) に変換する、またはその逆の変換を行うプロセスです。
#Serialization Processbook = Book(title="Learning Django",
author="John", published_date="2023-01-01")
serializer = BookSerializer(book)
#Returns a dictionary of the sertalized data
print(serializer.data)
#DeSerialization Process
data ={'title': 'Learning Django', 'author': 'John','published_date': '2023-01-01'}
serializer = BookSerializer(data-data)
if serializer.is_valid():
#Validated data is now available in serializer.validated data
book = serializer.save()
# This would save the book instance to the database
#パート #Django #REST #フレームワークのシリアライザー #クラスのクイック #ガイド #アルタフ #カーン著 #年 #月