08 序列化器Serializer
阿新 • • 發佈:2021-12-17
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,匹配任何非空字串,包含了路徑分隔符(/)(不能用?)