Django序列化基本操作
程序员文章站
2022-06-16 16:53:42
...
Django的基本的序列化与反序列化操作
- 序列化-----> 也就是出库操作,多用于查询数据,把python串转成json字符
- 反序列化—>也就是入库操作,多用于向数据库添加数据,把json串转成python字符
反序列化
# 1. 反序列化----单表入库操作
*** views.py文件里 ***
class Addcate(APIView):
def post(self,request):
# 用postman进行存入数据
data = request.data
# 把定义好的反序列化拿来进行存入数据,也就是把获取的数据转成python串
cate = CateUnserializer(data=data)
# 判断cate值,is_valid()它自带的一个判断方法。
if cate.is_valid():
cate.save()
return HttpResponse('YES')
return HttpResponse('No')
*** serializer.py文件里 ***
# 1). 反序列化 添加分类
# 序列化导包
from rest_framework import serializers
class CateUnserializer(serializers.Serializer):
# 反序列化是 serializers.Serializer
name = serializers.CharField(max_length=32)
# 添加(‘固定的值’)
# data = {'name':'dsds','pwd':123}
# **data => name='dsds',pwd=123
def create(self,data):
return Cate.objects.create(**data)
反序列化添加及修改
# 2. 添加商品,且所属分类
=== views.py文件 ===
class AddGoods(APIView):
def post(self,request):
# 例,只是把data定义成一个固定的值,进行存储
#** data = {'name':'oppo','cates':1}
data = {'name':'oppo','cates_id':1}
goods = GoodsUnserializer(data=data)
if goods.is_valid():
goods.save()
return HttpResponse('OK')
return HttpResponse('不OK')
===serializer.py ====
#2). 反序列化 --出库----添加商品
class GoodsUnserializer(serializers.Serializer):
name = serializers.CharField(max_length=32)
# 在我们的商品表里有外建字段,是int类型(两种存储方式)
#** cates = serializers.IntegerField()
cates_id = serializers.IntegerField()
# 添加商品、
def create(self,data):
#** return Goods.objects.create(
# cates_id = data.pop('cates'),**data)
return Goods.objects.create(**data)
==== serializer.py里 ====
# 修改商品---->包含三个参数(self,instance,data)
def update(self,instance,data):
# instance == Goods.objects.filter(id=2)
return instance.update(**data)
=== views.py ===
# 修改制定字段的类型
def put(self,request):
goods = Goods.objects.filter(id=1)
data = {'name':'iphone','cates':2}
g = GoodsUnserializer(goods,data=data)
if g.is_valid():
g.save()
return HttpResponse('YES')
return HttpResponse('NO')
序列化的基本操作
# 4*用序列化查询分类
===== views.py =====
class Getcate(APIView):
def get(self,request):
# 查询出id为1的分类
cate = Cate.objects.filter(id=1).first()
# 查询的结果为first(),就是many=False,也可以不用书写
# 查询的结果为all(),就是many=True
ser = CateSerializer(cate)
return JsonResponse(ser.data)
====serializer.py =========
# 4* 序列化--出库 ------ cate
class CateSerializer(serializers.ModelSerializer):
class Meta:
model = Cate
fields = '__all__'
# fields = ("name",) # 保证是一个元组,或列表
# exclude = ("name",) # 除了Name之外的所有字段
---------------------------------------------------------------------------------------------------
===== views.py =====
# 用序列化查询商品,并且查询属于谁的分类
class Getgoods(APIView):
def get(self,request):
# 查询出id为2的商品
goods = Goods.objects.filter(id=2).first()
# 进行序列化转数据类型
ser = GoodsSerializer(goods)
return JsonResponse(ser.data)
====serializer.py =========
# 商品的序列化
class GoodsSerializer(serializers.ModelSerializer):
# 当查询的数据有外建指向,且想显示出姓名,就可以用下面方法利用外建属性直接指定
catems = serializers.CharField(source='cates.name')
class Meta:
model = Goods
fields = ('catems','id','name')
----------------------------------------------------------------------------------
# 当我们查询的需求在俩个序列化里,我们可以通过以下的方法导进来
# goods = GoodsModelSerializer(many=True)就可以使用了,
# 他最后的数据类型是[{}]
#class ShopModelSerializer(serializers.ModelSerializer):
# goods = GoodsModelSerializer(many=True)
# class Meta:
# model = Shop
# fields = '__all__'
上一篇: 【App】启动优化