[Day20] - Django-REST-Framework Serializers 介绍

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


<<:  [Day 22]第二主餐-aws,始动

>>:  [Day 18] - 初探永丰银行线上收款API - 丰收款 - 建立订单!

30. CSS 的 z-index & Stacking Context 的形成

Stacking Context 定义 Stacking Context是指对於HTML元素而言,有...

在HTML加入JavaScrip

JavaScript最常使用在网页上,所以基本上所有浏览器都可以用来执行JavaScript程序。 ...

Day2:AWS Shared Responsibility Model

只要谈到AWS资安议题绝对不能不提到 AWS Shared Responsibility Model...

Day28-台湾菜鸟工程师除错之卷三

由於没有发布紧急事态宣言 但是为了救旅游业却推出了旅游补助方案(goto キャンペーン) 当时候的...

第十天:安装 IntelliJ IDEA

在後续章节里,我们将使用 IntelliJ IDEA 示范如何编辑 Gradle 的 Build S...