Django REST framework - 序列化组件、source、钩子函数

[Django REST framework - 序列化组件、source、钩子函数]


序列化器-Serializer

什么是rest_framework序列化?

在写前后端不分离的项目时:
我们有form组件帮我们去做数据校验
我们有模板语法,从数据库取出的queryset对象不需要人为去转格式
当我们写前后端分离项目的时:
我们需要自己去做数据校验
我们需要手动去转数据格式,因为跨平台数据传输都用json字符串,不能直接jsonqueryset对象

序列化器的作用

1 序列化:把python中的对象转成json格式字符串
        序列化器会把模型对象转换成字典,经过response以后变成json字符串
    
2 反序列化:把json格式字符串转成python中的对象
        把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型

3 注意:drf的序列化组件(序列化器)
    把对象(Book,queryset对象)转成字典
    因为有字典,直接丢到Response中就可以了
序列化,反序列化
    -对象----》json
    -json---》对象
    
序列化器
    -定义一个类,继承Serializer
    -在类内些字段(常用字段,和非常用字段)(字段参数)
    -在视图类中,实例化得到一个序列化类的对象,传入要序列化的数据
    -对象.data---》就是字典
    -source

序列化器的基本使用

from rest_framework.serializers import Serializer,ModelSerializer
from rest_framework import serializers
Serializer是rest_framework原生的序列化组件
ModelSerializer是rest_framework在原生的序列化组件的基础上封装了一层的序列化组件
用法:1、在用我们的rest_framework序列化组件的时候,我们的视图层都必须写视图类,不能再写视图函数

   2、我们需要针对每一张模型表写一个类来继承Serailizer或者ModelSerailizer类,

 注:当我们在视图类里需要对数据进行序列化或者反序列化的时候,在自己定义的类传入需要序列化的数据实例化,
   调用.data即可拿到序列化或者校验后的数据了
Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializer
1 写一个序列化的类,继承Serializer
class BookSerializer(serializers.Serializer):
    # 在这里写要序列化的字段
    # 序列化字段类(有很多,常用的就几个,等同于models中的字段类)
    # 字段类,有很多字段参数()
    name = serializers.CharField()
    price = serializers.IntegerField()
    # publish = serializers.CharField()
2 在类中写要序列化的字段(常用字段,和非常用字段)(字段参数)
    name = serializers.CharField()
    price = serializers.IntegerField()
3 在视图类中使用(实例化得到一个序列化类的对象,传入要序列化的数据)
    class BookView(APIView):
    def get(self, request):
        book_list = models.Book.objects.all()
        # instance=None, 要序列化的数据
        # data=empty  ,要反序列化的数据(目前data先不用)
        # many=True 如果序列化多条,一定要写many=True
        book_ser = BookSerializer(instance=book_list, many=True)
        # book_ser.data就是序列化后的数据
        return Response(book_ser.data)
4 得到序列化后的数据,返回(对象.data---》就是字典)
    book_ser.data
    
5 字段参数,source,指定要序列化表中的哪个字段

##########具体操作步骤见下方详细操作#########
路由层 urls.py
from django.urls import path
from app import views


urlpatterns = [
    path('admin/', admin.site.urls),
    # 获取所有的书籍信息
    path('books_new/', views.BookView.as_view()),
    # 对某本书进行操作
    path('books_new/<int:id>/', views.BookViewId.as_view()),
  

]
模型层 models.py
from django.db import models

class Book(models.Model):
    name = models.CharField(max_length=32, verbose_name='书名')
    publish = models.CharField(max_length=32, verbose_name='出版社')
    price = models.IntegerField(verbose_name='价格')
序列化器层 serializer.py
from rest_framework import serializers
from app import models


# 新建序列化类,继承Serializer
class BookSerializer(serializers.Serializer):
    # 类中定义和模型表一一对应的字段,在这里写要序列化的字段
    # 序列化字段类(有很多,常用的就几个,等同于models中的字段类)
    # 字段类,有很多字段参数()
    name = serializers.CharField()
    price 
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值