drf之序列化组件的增删改查

APIView的基本使用

1.先下载一个模块
安装drf:pip3 install djangorestframework
# 需要注意的是django版本的和下载的模块的版本适配问题 

导入模块:from rest_framework.views import APIView
# 这里需要注意路由的编写  as_view()

序列化组件

# drf提供的一种可以快速实现序列化的类
需要先创建一个py文件 用来写继承序列化类
from rest_framework import serializers
class BookSerializer(serializers.Serializer)
name = serializers.CharField(max_length=32)
    price = serializers.CharField(max_length=32)
    publish = serializers.CharField(max_length=32)

    def create(self, validated_data):
        res = Book.objects.create(**validated_data)
        return res

    def update(self, instance, validated_data):
        instance.name = validated_data.get('name')
        instance.price = validated_data.get('price')
        instance.publish = validated_data.get('publish')
        instance.save()
        return instance
序列化
# 获取单个和多个的get方法

序列化多条数据
class BookView(APIView):
    def get(self, request):
        book_list = Book.objects.all()
        ser = BookSerializer(instance=book_list, many=True)
# instance是需要序列化的对象   many表示可以序列化多条数据
        return Response(ser.data)


序列化单条数据
class BookView(APIView):
    def get(self, request, pk):
        book_list = Book.objects.filter(pk=pk).first()
        ser = BookSerializer(instance=book_list)
        return Response(ser.data)


反序列化
# 新增数据post 修改数据 put 
反序列化的新增
class BookView(APIView):
    def post(self, request):
        ser = BookSerializer(data=request.data)
        if ser.is_valid():
            ser.save()
            return Response(ser.data)
        else:
            return Response(ser.errors)

# 反序列化的修改
class BookView(APIView):
    def put(self, request, pk):
        book = Book.objects.filter(pk=pk).first()
        ser = BookSerializer(instance=book, data=request.data)
        if ser.is_valid():
            ser.save()
            return Response(ser.data)
        else:
            return Response(ser.errors)

# 删除数据 delete
class BookView(APIView):
    def delete(self,request,pk):
        Book.objects.filter(pk=pk).delete()
        return Response()

总结

前后端分离项目:需要我们自己去做数据校验,手动去转数据格式,因为跨平台数据传输都用json字符串,不能直接jsonqueryset对象

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

序列化器:1.定义一个类继承Serializer
        2.在类内写字段,字段参数
        3.在视图类中,实例化得到一个序列化类的对象,传入要序列化的数据
        4.返回的时候用Response序列化类的对象.data直接获取数据
posted @   Hsummer  阅读(102)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示