0 Django REST Framework 開發 ---- Serializer 與 ModelSerializer


Django REST Framework 中提供了很多種 Serializer 類, 在這里只介紹兩種最常見的序列化類。

注: 本文是 Django REST Framework 系列第一篇文章,后邊的文章會反復用到這里出現的 ProductSerializer

 

Serializer

使用 Serializer 可以將 queryset, model 實例等復雜數據類型(complex types)序列化成原生的 python 數據結構,且將其渲染成 JSON,XML 等其他數據類型。 Serializers 也可以反序列化,可將輸入數據驗證后,解析成復雜數據類型。

Django REST Framework 中的 serializers 工作方式與 Django 的 Form 和 ModelForm 及其相似。Serializer 類提供了強大的通用方式控制了響應的輸出,而 ModelSerializer 類則針對 model 實例以及 queryset 封裝了大量便捷的方法,使開發變得更加容易,簡潔。

詳見:https://www.django-rest-framework.org/api-guide/serializers/

如下面代碼所示。
首先建立 serializer.py 文件,引入 serializers,從Model 中引入預先定義好的 Product (比如 Product 包括 id, desc, click_num, add_time 等字段)。然后建立新類,且集成 serializers.Serializer。其中對 id,desc,click_num 進行數據輸入認證。使用 create 方法將合法輸入的數據寫入數據庫Product表中。

 1 from rest_framework import serializers
 2 from products.models import Product
 3 
 4 
 5 class ProductSerializer(serializers.Serializer):
 6     id = serializers.IntegerField(read_only=True)
 7     desc = serializers.CharField(required=False, allow_blank=True, max_length=100)
 8     click_num = serializers.IntegerField(default=0)
 9 
10     def create(self, validated_data):
11         """
12         Create and return a new `Product` instance, given the validated data.
13         """
14         return Product.objects.create(**validated_data)

 

ModelSerializer

ModelSerializer 類似於 ModelForm 提供了一些便捷的方法,使你可以自動對 Django Model 中包含的部分或所有字段序列化。
用法上 ModelSerializer 和 Serializer 基本相同,除下面幾點外:

  • 在 Model 字段的基礎上自動生成序列化字段
  • 自動生成對 unique_together 的 validators
  • 自動包含基礎的 .create(), update() 的實現
1 class ProductSerializer(serializers.ModelSerializer):
2     class Meta:
3         model = Product
4         fields = "__all__"

or

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ("id", "click_num")  # only list part of Product attributes, not all of them

 

見:https://www.django-rest-framework.org/api-guide/serializers/#modelserializer

如果被序列化的 Models 帶有外鍵,比如:

Product 表中含有 category (表 Category 的主鍵)

Product:
product_id, title, click_num, category(fk), price, cost

Category:
category, desc

用以下方法可以顯示出某 Product 和 Category 所有關聯信息:

 1 class CategorySerializer(serializers.ModelSerializer):
 2     class Meta:
 3         model = Category
 4         fields = "__all__"
 5 
 6 
 7 class ProductSerializer(serializers.ModelSerializer):
 8     category = CategorySerializer()  # 通過這種實例化方式,Category 的所有字段信息都會以 JSON 的形式嵌入到輸出中
 9     class Meta:
10         model = Product
11         fields = "__all__"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM