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})