APIView
views.py
class PeopleView(APIView):
#查询所有人信息
# def get(self,request):
# people = People.objects.all()
# ser = PeopleSerializer(people,many=True) #序列化多个数据
# return Response(ser.data,status=200)
#
def get(self,request,id):
data = People.objects.get(id=id)
ser = PeopleSerializer2(instance=data)
return Response(ser.data,status=200)
#添加一个人物信息
def post(self,request,id):
print("request.data",request.data)
ser = PeopleSerializer2(data=request.data)
#判断反序列化是否成功,raise_exception如果出现一场,则会抛出异常
if ser.is_valid(raise_exception=True):
ser.save() #使用save是必须重写create方法
return Response({"msg":"反序列化成功"},status=201)
return Response({"msg":"反序列化失败"},status=500)
def delete(self,request,id):
People.objects.filter(id=id).delete()
return Response({"msg":"删除成功"},status=200)
def put(self,request,id):
try:
peo_data = People.objects.get(id=id)
except Exception as e:
print(e)
return Response({"msg":"error"},status=404)
#instance=peo_data 要修改的数据,data=request.data,修改成什么数据
ser = PeopleSerializer2(instance=peo_data,data=request.data)
if ser.is_valid(raise_exception=True):
ser.save()
return Response({"msg":"success"},status=201)
return Response({"msg":"error"},status=500)
serializer.py APIView的增加和修改需要重写update和create方法
class PeopleSerializer(serializers.Serializer):
# id = serializers.IntegerField()
name = serializers.CharField(max_length=20)
sex = serializers.CharField(max_length=5)
money = serializers.IntegerField()
ranking = serializers.IntegerField()
def create(self, validated_data):
print("validated_data",validated_data)
sql = People.objects.create(**validated_data)
return sql
#instance准备修改的对象,validated_data准备修改成什么数据
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()
#返回修改后的orm对象
return instance
GenericAPIView
查询所有人物信息
添加学生信息
class StudentGenericAPIView(GenericAPIView):
#1.指定查询结果集
queryset = Student.objects.all()
#2.指定序列化器
serializer_class = StudentSerializer
#查询所有人物信息
def get(self,request):
data = GenericAPIView.get_queryset(self)
ser = GenericAPIView.get_serializer(self,instance=data,many=True)
return Response(ser.data,status=200)
#增加一个人物信息,反序列化
def post(self,request):
#使用序列化器进行反序列化,data = request.data要反序列化数据
ser = GenericAPIView.get_serializer(self,data = request.data)
if ser.is_valid(raise_exception=True):
ser.save()
return Response({"msg":"添加成功"},status=200)
return Response({"msg":"添加失败"},status=400)
#查询单个人物信息
class StudentGenericAPIView(GenericAPIView):
#1.指定查询结果集
queryset = Student.objects.all()
#2.指定序列化器
serializer_class = StudentSerializer
#3.指定动态参数
lookup_url_kwarg = 'id' # StudentGenericAPIView/<str:id>/'
#4.指定过滤orm字段
lookup_field = 'id'
#查询单个人物信息
def get(self,request,id):
data = GenericAPIView.get_object(self)
ser = GenericAPIView.get_serializer(self,instance=data)
return Response(ser.data,status=200)
#修改,删除人物信息
class StudentGenericAPIView(GenericAPIView):
#1.指定查询结果集
queryset = Student.objects.all()
#2.指定序列化器
serializer_class = StudentSerializer
#3.指定动态参数
lookup_url_kwarg = 'id'
#4.指定过滤orm字段
lookup_field = 'id'
#查询单个人物信息
def get(self,request,id):
data = GenericAPIView.get_object(self)
ser = GenericAPIView.get_serializer(self,instance=data)
return Response(ser.data,status=200)
#查询所有人物信息
# def get(self,request):
# data = GenericAPIView.get_queryset(self)
# ser = GenericAPIView.get_serializer(self,instance=data,many=True)
# return Response(ser.data,status=200)
#增加一个人物信息,反序列化
def post(self,request,id):
#使用序列化器进行反序列化,data = request.data要反序列化数据
ser = GenericAPIView.get_serializer(self,data = request.data)
if ser.is_valid(raise_exception=True):
ser.save()
return Response({"msg":"添加成功"},status=200)
return Response({"msg":"添加失败"},status=400)
def delete(self,request,id):
GenericAPIView.get_object(self).delete()
return Response({"code":200,"msg":"删除成功"})
def put(self,request,id):
data = GenericAPIView.get_object(self)
ser = GenericAPIView.get_serializer(self,instance=data,data=request.data)
if ser.is_valid(raise_exception=True):
ser.save() #save前必须调用is_valid方法
return Response({"msg":"修改成功"})
配合Mixin使用
查询全部数据,查询单条数据,删除数据,修改数据,增加数据
from rest_framework.mixins import ListModelMixin,CreateModelMixin,UpdateModelMixin,RetrieveModelMixin,DestroyModelMixin
#查询全部数据和添加数据
class PeopleMinxGener_creat_list(GenericAPIView,ListModelMixin,CreateModelMixin):
#1.指定查询结果集
queryset = Student.objects.all()
#2.指定序列化器
serializer_class = StudentSerializer
#查询所有人物信息
def get(self,request):
return self.list(request)
#添加数据
def post(self,request):
name = request.data.get("name")
return self.create(request)
class PeopleMinxGener_update_del_ret(GenericAPIView,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin):
queryset = Student.objects.all()
serializer_class = StudentSerializer
#指定动态参数
lookup_url_kwarg = 'id'
#4.指定过滤的orm字段
lookup_field = 'id'
#查询单条
def get(self,request,id):
return self.retrieve(request)
#修改单条数据
def put(self,request,id):
return self.update(request)
#删除单条数据
def delete(self,request,id):
return self.destroy(request)