第十单元 序列化器
时间:2022-10-17 11:30:01
序列化器代码:
# 序列化器 from rest_framework import serializers from myapp.models import People # 普通序列化器 class PeopleSerializer(serializers.Serializer): # id = serializers.IntegerField() name = serializers.CharField(max_length=20) sex = serializers.CharField(max_length=20) money = serializers.IntegerField() ranking = serializers.IntegerField() # 将调用新数据create方法 def create(self, validated_data): res = People.objects.create( **validated_data ) return res # 修改数据需要数显update方法 def update(self, instance, validated_data): instance.name = validated_data.get('name') instance.sex = validated_data.get('sex') instance.money = validated_data.get('money') instance.ranking = validated_data.get('ranking') instance.save() return instance # 模型序列化器 class PeopleSerializer2(serializers.ModelSerializer): class Meta: # 指定模型类 model = People # 指定映射字段
fields = '__all__' # 指明所有模型类字段
# exclude = ('createtime',) # 排除掉的字段
# read_only_fields = ('title','description') # 只用于序列化的字段
# fields = ('title','description','inventory') # 手动指明字段
# extra_kwargs = {
# 'price':{'min_value':0, 'required':True},
# } # 修改原有字段的选项参数
类试图代码:
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from myapp.models import People
from myapp.serializers import PeopleSerializer,PeopleSerializer2
# Create your views here.
class MyView(APIView):
def get(self,request):
print(request.query_params)
return Response({
'msg':'success'},status=200)
def post(self,request):
print(request.data)
return Response({
'msg':'success'},status=201)
class PeopleView(APIView):
# 查询所有信息
# def get(self,request):
# people = People.objects.all()
# peoples_list = [] # 手动序列化
# for i in people:
# people_dict = {
# "name":i.name,
# "sex":i.sex,
# "money":i.money,
# "ranking":i.ranking,
# }
# peoples_list.append(people_dict)
# return Response(peoples_list,status=200)
def get(self,request):
people = People.objects.all()
# people是要序列化的数据,many=True多个数据
ser = PeopleSerializer2(people,many=True)
return Response(ser.data,status=200)
# 增加一个人物信息,反序列化,json=>orm格式数据
def post(self,request):
# 使用序列化器进行反序列化
ser = PeopleSerializer2(data=request.data)
# 判断反序列化是否成功
# ser.is_valid判断是否合法
# raise_exception=True如果出现异常会抛出异常
if ser.is_valid(raise_exception=True):
# 反序列化成功就保存
# 保存会调用普通序列化器内的create、update
ser.save()
# 201添加或修改成功
return Response({
"msg":"添加数据成功"},status=201)
return Response({
"msg":"添加数据失败"})
class PeopleView2(APIView):
def get(self, request, id):
try:
peo_data = People.objects.get(id=id)
except Exception as e:
print(e)
# 404数据不存在
return Response({
'msg':'查询失败'},status=404)
# 对ORM操作查询到的数据进行序列化
ser = PeopleSerializer2(peo_data)
return Response(ser.data,status=200)
def put(self,request,id):
try:
peo_data = People.objects.get(id=id)
except Exception as e:
print(e)
# 404数据不存在
return Response({
'msg':'查询失败'},status=404)
# 对要更新的数据进行 反序列化
# initial=peo_data 要修改的ORM对象(实例)
# data=request.data 是html页面提交的数据用于修改
ser = PeopleSerializer2(instance=peo_data,data=request.data)
# 判断反序列化是否成功
if ser.is_valid(raise_exception=True):
ser.save()
return Response({
"msg": "修改数据成功"}, status=201)
return Response({
"msg": "修改数据失败"})
def delete(self,request,id):
try:
People.objects.get(id=id).delete()
except Exception as e:
print(e)
return Response({
'msg': '删除失败'}, status=404)
# 204删除成功
return Response({
'msg': '删除成功'}, status=204)