除了昨天介紹的 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