【无标题】

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字段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值