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,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

 

 

 
posted @ 2021-12-17 19:08  甜甜de微笑  阅读(39)  评论(0编辑  收藏  举报