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


 

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)

 

 

    


免責聲明!

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



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