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()
#models.py
from django.db import models
class Book(models.Model):
title=models.CharField(max_length=32)
price=models.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())
]
序列化多条
#序列化类的使用 # from .serializer import BookSerializer # class BookView(APIView): # def get(self,reqiuest): # book_list=models.Book.objects.all() # """ # instance=book_list,many=True # instance:要序列化的数据 # many:如果序列化的是多条数据,就必须加这个参数 # """ # ser=BookSerializer(instance=book_list,many=True) # return Response(ser.data)
Django2默认支持以下5个转化器:
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式 int,匹配正整数,包含0。 slug,匹配字母、数字以及横杠、下划线组成的字符串。 uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。 path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)