1.使用GenericAPIView实现游戏的增删改查
# 使用GenericAPIView实现游戏的增删改查
from rest_framework.generics import GenericAPIView
class GameView3(GenericAPIView):
queryset = Game.objects.all() # 指定查询结果集
serializer_class = GameSerializer2 # 指定序列化器
def get(self, request): # 1
# ORM操作数据 -》 json数据 序列化
# 获取全部游戏信息 ORM操作数据
games_data = self.get_queryset() # 获取查询结果集
# 使用序列化器,实现序列化
# 多个数据需要加上 many=True
ser = self.get_serializer(games_data, many=True)
# 注意返回的时ser.data 而不是ser
return Response(ser.data)
def post(self, request): # 2 增加数据
# request.data 就是前端提交的json数据
# 1.使用序列化器进行反序列化,data参数就是要反序列化的数据
ser = self.get_serializer(data=request.data)
# 2.校验 参数raise_exception=True,出现异常时自动抛出异常
if ser.is_valid(raise_exception=True):
# 3.保存
ser.save()
return Response({'msg':'添加数据成功'}, status=201)
return Response({'msg': '添加数据失败'}, status=500)
# 根据id 实现 单个 查询 修改 删除
class GameView4(GenericAPIView):
queryset = Game.objects.all()
serializer_class = GameSerializer2
lookup_url_kwarg = 'id' # 动态参数
lookup_field = 'id' # 指定过滤ORM字段
def get(self, request, id): # 3
# 根据id获取数据,单个数据
try:
game_data = self.get_object()
except Exception as e:
print(e)
return Response({'msg':'数据不存在'}, status=404)
ser = self.get_serializer(game_data)
return Response(ser.data, status=200)
def put(self, request, id): # 4 反序列化之更新
# 1.获取要更新的数据 ORM操作的数据->instance
try:
game_data = self.get_object()
except Exception as e:
print(e)
return Response({'msg':'数据不存在'}, status=404)
# 2.反序列化 game_data要更新的orm对象 request.data去更新这个对象的数据
ser = self.get_serializer(instance=game_data, data=request.data)
# 3.校验
if ser.is_valid(raise_exception=True):
# 4.保存
ser.save()
return Response({'msg':'更新数据成功'}, status=201)
return Response({'msg':'更新数据失败'}, status=500)
def delete(self, request, id): # 5 删除
try:
self.get_object().delete()
except Exception as e:
print(e)
return Response({'msg': '删除失败'}, status=404)
return Response({'msg': '删除数据成功'}, status=204)
2.使用GenericAPIView和混入类Mixin配合使用实现游戏的增删改查
from rest_framework.generics import GenericAPIView
from rest_framework.mixins import ListModelMixin, CreateModelMixin,\
RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
class GameView3(GenericAPIView, ListModelMixin, CreateModelMixin):
queryset = Game.objects.all() # 指定查询结果集
serializer_class = GameSerializer2 # 指定序列化器
def get(self, request): # 1
return self.list(request)
def post(self, request): # 2 增加数据
return self.create(request)
# 根据id 实现 单个 查询 修改 删除
class GameView4(GenericAPIView, RetrieveModelMixin,\
UpdateModelMixin,DestroyModelMixin ):
queryset = Game.objects.all()
serializer_class = GameSerializer2
lookup_url_kwarg = 'id' # 动态参数
lookup_field = 'id' # 指定过滤ORM字段
def get(self, request, id): # 3
return self.retrieve(request)
def put(self, request, id): # 4 反序列化之更新
return self.update(request)
def delete(self, request, id): # 5 删除
return self.destroy(request)
3.使用扩展类实现增删改查操作
from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView
class GameView3(ListCreateAPIView):
queryset = Game.objects.all()
serializer_class = GameSerializer2
class GameView4(RetrieveUpdateDestroyAPIView):
queryset = Game.objects.all()
serializer_class = GameSerializer2
# lookup_url_kwarg = 'id' # 动态参数
# lookup_field = 'id' # 指定过滤ORM字段