iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0

除了昨天介紹的 Viewset ,有另外一個大家不太熟悉但是看似又非常強大的 class,就是 Serializers 了吧。今天帶大家來了解一下 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 進行資料的處理及序列化。

Modelserializers 介紹

modelserializer 則將常使用於 Model 的溝通集結成 一個 class

  • 基於 Model 自動生成 fields
  • 自動生成驗證器,進行資料驗證
  • 自動建立基本知 .create() 及 .update() 功能

使用方法:

  • 指派要使用的 Model 給 model 參數。
  • fields 中可以輸入要處理的變數。
class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ['id', 'name', 'uploader', 'price']
  • fields部分,也可以透過反面的邏輯 exclude 指定不要使用的 fields ,其他皆使用
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


上一篇
[Day19] - Django-REST-Framework Viewsets 介紹
下一篇
[Day 21] - Django-REST-Framework APIView 介紹 -- 處理 HTTP Method 的好幫手
系列文
使用Django Rest Framework, Docker, Docker Compose 製作後端服務應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言