除了昨天介紹的 Viewset ,有另外一個大家不太熟悉但是看似又非常強大的 class,就是 Serializers 了吧。今天帶大家來了解一下 Serializers 。
Serializers 的功用,像是 Django 裡面 Form 的作用,將資料進行序列化,讓資料庫與資料庫可以進行傳輸。
像是我們可以定義 Serializers 如下:
class ProductSerializer(serializers.Serializer):
uploader= serializers.CharField()
name = serializers.CharField()
status = serializers.CharField()
description = serializers.CharField()
view = serializers.IntegerField()
price = serializers.IntegerField()
def create(self, validated_data):
print(validated_data)
return Product.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.uploader = validated_data.get('uploader', instance.uploader)
instance.name = validated_data.get('name', instance.name)
instance.status = validated_data.get('status', instance.status)
instance.description = validated_data.get('description',
instance.description)
instance.view = validated_data.get('view', instance.view)
instance.price = validated_data.get('price', instance.price)
instance.save()
return instance
透過 serializers 進行資料的處理及序列化。
modelserializer 則將常使用於 Model 的溝通集結成 一個 class
使用方法:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ['id', 'name', 'uploader', 'price']
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
exclude = [ 'uploader', 'price']
透過 Serializers , ModelSerializers 可以處理 Model 資料的溝通。不同的資料類型以及用途可以使用不同的 Seriazers 像是,HyperlinkedModelSerializer, ListSerializer, BaseSerializer 等等。越是了解其用途及特色,越能發揮 Serializers 強大的威力。
參考資料:
https://www.django-rest-framework.org/api-guide/serializers/#serializers
https://www.django-rest-framework.org/api-guide/serializers/#modelserializer