1. 程式人生 > >Django REST Framework 序列化和校驗 知識點

Django REST Framework 序列化和校驗 知識點

any 組件 imp 圖片 png 添加 obj ons self.

DRF序列化

  Django ORM對象 --> JSON格式的數據  序列化

  JSON格式的數據 --> Django ORM數據  反序列化

  需要兩個工具:

from rest_framework.serializers import Serializer
from rest_framework.serializers import MoselSerializer 

  類比Django中的form組件

    Django form --> HTML表單

    HTML表單 --> ORM數據

  用法:

  many=True

參數

  實例化 序列化器對象的時候, 添加many=True參數, 能實現序列化多個對象

  正向序列化用 read_only = True

  反向序列化用 write_ony = True

  source

category = serializers.CharField(source="get_category_display" read_only=True)

# Obj --> JSON
# Obj.title --> "書名"
# Obj.get_category_display() --> "Python"

  ModelSerializer

    和model一對一綁定的序列化類

  serializerMethodField字段

技術分享圖片

技術分享圖片

技術分享圖片

校驗

   校驗的規則3中方法

  1. 局部的校驗方法

# 在serializer類中定義局部校驗規則    # validate 加 字段名
    def validate_title(self, value):
        # value就是需要檢驗的這個字段的值
        """類似於Form組件的局部鉤子"""
        if 紅燒牛肉 in value:
            raise serializers.ValidationError(
你是魔鬼嗎?) else: return value

  2. 全局的校驗方法

def validate(self, attrs):
    pass

  3. 自定義的校驗函數

# 類似於Form組建中的自定義校驗規則
title = serializers.CharField(max_length=32, validators=[my_heiheihei, ])

def my_heiheihei(value)
    pass

  校驗規則由序列化對象的 is_valid 觸發

 def post(self, request):
        # 1. 獲取前端提交的數據
        # 1.1 APIView
        # self.request是誰?  不是Django原來的哪個request  self._request才是原來的request
        print(request.data)  # APIView 包裝的數據
        # 2. 對數據做有效性校驗
        ser_obj = BookModelSerializer(data=request.data)
        if ser_obj.is_valid():
            ser_obj.save()  # 調用的是BookSerializer類中的create方法,需要自己去實現
            # 3. 拿到序列化的數據去數據庫創建新記錄
            return Response("ok")
        else:
            # 返回校驗失敗的錯誤提示信息
            return Response(ser_obj.errors)

    

Django REST Framework 序列化和校驗 知識點