1. 程式人生 > 其它 >08 序列化器Serializer

08 序列化器Serializer

1 序列化元件介紹

 1.序列化,序列化器會把模型物件轉換成字典,經過response以後變成json字串
 2. 反序列化,把客戶端傳送過來的資料,經過request以後變成字典,序列化器可以把字典轉成模型
 3. 反序列化,完成資料校驗功能

2 簡單使用

1 寫一個序列化的類,繼承Serializer
2 在類中寫要序列化的欄位,想序列化哪個欄位,就在類中寫哪個欄位
3 在檢視類中使用,匯入--》例項化得到序列化類的物件,把要序列化的物件傳入
4 序列化類的物件.data   是一個字典
5 把字典返回,如果不使用rest_framework提供的Response,就得使用JsonResponse
# ser.py class BookSerializer(serializers.Serializer): # id=serializers.CharField() name=serializers.CharField() # price=serializers.DecimalField() price=serializers.CharField() author=serializers.CharField() publish=serializers.CharField() # views.py class BookView(APIView):
def get(self,request,pk): book=Book.objects.filter(id=pk).first() #用一個類,毫無疑問,一定要例項化 #要序列化誰,就把誰傳過來 book_ser=BookSerializer(book) # 呼叫類的__init__ # book_ser.data 序列化物件.data就是序列化後的字典 return Response(book_ser.data) # urls.py re_path('books/(?P<pk>\d+)
', views.BookView.as_view()),

如果序列化一條資料

#serializer.py
from rest_framework import serializers
class BookSerializer(serializers.Serializer):
# 在這裡寫要序列化的欄位
title=serializers.CharField()
price=serializers.IntegerField()


#views.py

from
.serializer import BookSerializer class BookdetailView(APIView): def get(self,reqiuest,*args,**kwargs): pk=kwargs['pk'] book=models.Book.objects.all().filter(pk=pk).first() """ instance=book_list,many=True instance:要序列化的資料 many:如果序列化的是多條資料,就必須加這個引數 """ ser=BookSerializer(instance=book) return Response(ser.data)

#url.py
urlpatterns = [
path('admin/', admin.site.urls),
# path('index/',views.IndexView.as_view()),
#path("books/",views.BookView.as_view()),
#django2的轉換器
path("books/<int:pk>/",views.BookdetailView.as_view())
]
Django2預設支援以下5個轉化器:
str,匹配除了路徑分隔符(/)之外的非空字串,這是預設的形式
int,匹配正整數,包含0。
slug,匹配字母、數字以及橫槓、下劃線組成的字串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字串,包含了路徑分隔符(/)(不能用?)