Django REST Framework 序列化和校驗 知識點
阿新 • • 發佈:2019-01-16
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 序列化和校驗 知識點