drf,序列化器

drf,序列化器

drf 的介绍和使用

为什么要使用 Django-Rest-Framework(drf)?

​ Django REST Framework 可以在 Django 的基础上迅速实现API

​ 并且自身还带有 WEB 的测试页面,可以方便测试自己的 APT

​ 非常适合目前流行的前后端分离开发模型

drf的使用

​ 安装drf (前面的笔记中有)

	  pip install djangorestframeword
序列化器
  • 什么是序列化

​ 将 object 对象转为 json 数据的过程

  • 什么反序列化

​ 把 json 数据转为 object 对象的过程

  • 使用序列化器

定义一个是商品模型

# 1. 商品模型
class Goods(models.Model):

    # 商品名称
    name = models.CharField(max_length=20)
    # 商品价格
    price = models.DecimalField(max_digits=10, decimal_places=2)
    # 图片
    img = models.ImageField(upload_to='static')

在子应用里创建一个存放序列化器的文件 serializer.py

在 serializer.py 文件中自定义一个商品序列化器 -----版本01(不常用)

#  自定义序列化器

# 引入序列化模
from rest_framework import serializers
# 引入所有模型
from .models import *

# 商品序列化器 ,用来将数据转为json数据        ------ 版本1
class GoodsSerializer(serializers.Serializer):

    name = serializers.CharField(max_length=20)
    price = serializers.DecimalField(max_digits=10,decimal_places=2)
    img = serializers.ImageField()

    # 新增方法
    def create(self, validated_data):
        # 将序列化好的数据保存到数据库
        return Goods.objects.create(**validated_data)

------- 版本02

# 注意:括号中的参数
class GoodsSerializer(serializers.ModelSerializer):
    class Meta:
        # 关联到模型,相当于版本1的序列化模型中的每一条字段
        model = Goods
        # 商品(Goods)模型中所有字段
        fields = '__all__'
        # 商品(Goods)模型中单个字段
        # fields = ['id','name','price','img']

​ 后端添加数据

from rest_framework.views import APIView
from rest_framework.response import Response
# 导入所有模型
from .models import *
# 导入自定义的serializers文件
from .serializer import *

# 商品接口
class GoodsView(APIView):

    # 新增商品  反序列化  把json数据转为object对象的过程
    def post(self,request):
        # request.data:获取前端传来的数据
        print(request.data)

        # 使用序列化器将获取到的所有数据反序列化
        # GoodsSerializer:自定义的序列化器
        goods_ser = GoodsSerializer(data=request.data)

        # 调用验证函数,验证反序列化数据是否符合要求
        # raise_exception=True:抛出异常
        goods_ser.is_valid(raise_exception=True)

        # 保存反序列化后的数据
        goods_ser.save()

        return Response({'msg':'添加成功','code':200})

后端查询数据

    def get(self,request):
        # 先查询到所有商品
        goods_li = Goods.objects.all()
        # 使用商品序列化器将查询到的数据序列化
        goods_li_ser = GoodsSerializer(goods_li,many=True)
        # 返回序列化后的数据   .data:调用goods_li_ser中的数据
        return Response(goods_li_ser.data)

后端删除数据(和之前一样写,没有变化)

    def delete(self,request):
        # 获取前端传来的id
        id = request.data.get('id')
        # 根据传来的id删除该条数据
        Goods.objects.filter(id=id).delete()
        return Response({'msg': '删除成功', 'code': 200})

后端修改数据

def put(self,request):
    # 获取前端传来的id,并查询到该条数据
    id = request.data.get('id')
    goods = Goods.objects.filter(id=id).first()

    # 使用序列化器将查询到的数据序列化
    # instance:实例    data:获取前端所有要修改的数据
    goods_ser = GoodsSerializer(instance=goods,data=request.data)
    # 验证
    goods_ser.is_valid(raise_exception=True)
    # 保存
    goods_ser.save()
    return Response({'msg': '修改成功', 'code': 200})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值