django--drf-APIView和GenericAPIView

APIView
baseview<--view<--APIView<--GenericAPIView继承关系

位置 rest_framework.views.APIView

APIView和View对比
1、传入到视图方法中的是restframework的request对象,不是django的httprequest对象
2、视图方法可以返回restframework的Response,视图会为响应数据设置(render)符合前端的要求格式

3、在任何APIException的异常都会被捕获到,并且处理成合适的响应信息
4、在进行dispatch分发前,会对请求进行身份认证、权限检查、流量控制

支持定义的属性
• authentication_classes 列表或元组,身份认证类
• permissoin_classes 列表或元组,权限检查类
• throttle_classes 列表或元组,流量控制类

GenericAPIView
位置 rest_framework.generics.GenericAPIView
GenericAPIView和APIView对比
1、五个拓展类mixin
ListModelMixin、CreateModelMixin、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixin
提供了⼏种后端视图(对数据资源进⾏增删改查)处理流程的实现,如果需要编写的视图属于这五种,则视图可以通过继承相应的扩展类来复⽤代码,减少⾃⼰编写的代码量

class BookListView(GenericAPIView):
 # 指定查询集
 queryset = BookInfo.objects.all()
 # 指定序列化器
 serializer_class = BookInfoSerializer
 def get(self, request):
 """
 GET /books/
 :param request: Request类型的对象
 :return: JSON
 """
 # 查询数据库
 qs = self.get_queryset()#获取quertset数据 如果上面有pk 则会自动将pk放进去筛选
 # 实现序列化
 serializer = self.get_serializer(qs, many=True)
 # 响应序列化结果
 return Response(serializer.data)

获取queryset全部数据

get_queryset()

获取单条数据

get_object()


self.kwargs[lookup_url_kwarg]取到的是在url正则组里面取到的值

添加mixin

class BookListGenericAPIView(ListModelMixin,CreateModelMixin,GenericAPIView):
    '''GenericAPIView必须定义下面两个'''
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoModelSerializer

    def get(self,request):
        return self.list(request)

    def post(self,request):
        return self.create(request)

ListCreateAPIView继承 mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView,省去写def函数

class BookListGenericAPIView(ListCreateAPIView):
    '''GenericAPIView必须定义下面两个'''
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoModelSerializer
posted @   starSgz  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示