首页 > 其他分享 >drf之rabc,后台管理simplui

drf之rabc,后台管理simplui

时间:2022-10-13 15:22:39浏览次数:61  
标签:self queryset 视图 filter rabc simplui 排序 类中 drf


一、过滤类和排序类源码分析

# 我们之前在学习排序和过滤类的时候是在继承了GenericAPIView+ListModelMixin的视图类中才能够配置的
# 然后在视图类中的filter_backends属性中上写排序类和过滤类就能够实现
# 可以配置在这个属性的有:
    -drf内置的过滤类(SearchFilter),排序类(OrderingFiler)
    -第三方模块django-filter
    -自定义类:写一个类,继承BaseFilterBackend,重写filter_queryset,返回的qs对象,就是过滤或排序后的


# 然后只有获取全部才会涉及到排序
    所以肯定会有list方法
    所以我们可以去看一下ListModelMixin的源码

class ListModelMixin:
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())  # 这个就是从视图类中我们配置的排序和过滤属性配置的类中提取 
 
        page = self.paginate_queryset(queryset)  # 从视图类分页属性获取分页类
        # 这下面就是分页功能
        if page is not None:  # 判断是否为空
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)  # 返回分页和排序过后的数据

# 然后filter_queryset在这个类中没有这个方法和视图类中我们也没有写这个方法,所以我们要去GenericAPIView类中找这个方法 然后看一下这个方法写了啥
    def filter_queryset(self, queryset):
        for backend in list(self.filter_backends):  # 从视图类中filter_backends一个一个循环出来赋值给backend
            queryset = backend().filter_queryset(self.request, queryset, self)  # 然后这里又利用了递归函数 把数据给过滤和排序完
        return queryset  # 最后返回出去

# 我们可以看到在循环取值的时候 源码用了list强行把变成列表 这样就不会循环报错
class LoginView(GenericAPIView):
    filter_backends = BaseFilterView  # 我们在配置的时候也可以不用加列表也不会报错 

# 我们还可以在视图类中重写filter_queryset方法 这样也就有提供了另一种过滤方法和排序方法

 

标签:self,queryset,视图,filter,rabc,simplui,排序,类中,drf
From: https://www.cnblogs.com/stephenwzh/p/16788249.html

相关文章

  • cookie,session,token介绍,jwt原理介绍,base64编码和解码,drf-jwt快速使用,drf-jwt修改返
    1.cookie,session,token介绍这三者之间是有联系的,在互联网发展初期先有了cookie,在发展的过程中,因为出现了登录,还有购物车等功能,这是http的请求是无状态的,这是要解决这个问......
  • drf学习-9
    drf之内置认证类BasicAuthenticationRemoteUserAuthenticationSessionAuthentication:session认证 如果前端带着cookie过来,经过session的中间件,如果登录了,在request.use......
  • drf-接口文档
    接口文档接口编写已经写完了,需要编写接口文档,给前端的人使用-请求地址-请求方式-支持的编码格式-请求参数(get,post参数)-返回格式示例在公司的写法1)直接使用wor......
  • drf-09
    django配置文件1.根路径:BASE_DIR=Path(__file__).resolve().parent.parent2.django加密使用-秘钥SECRET_KEY='django-insecure-ov_#*#-o&svxjrtxe1op*%3wfobg)+)&k......
  • drf9-内置认证类 权限类 频率类 过滤类其他使用 全局异常抛出 文档接口
    -内置认证类-权限类-频率类-过滤类其他使用-全局异常抛出-文档接口内置认证类,权限类,频率类#内置的认证类 -BasicAuthentication -RemoteUserAuthentication -Se......
  • 【2022-10-11】DRF从入门到入土(九)
    drf之内置认证类BasicAuthenticationRemoteUserAuthenticationSessionAuthentication:session认证 如果前端带着cookie过来,经过session的中间件,如果登录了,在request.use......
  • 【2022.10.11】drf(9)
    今日内容内置认证类内置权限类内置频率类补充Django的配置文件以及每一个配置文件的作用过滤类的其他使用全局异常处理接口文档1......
  • django配置文件介绍,drf全局异常处理,drf接口文档
    内置认证类、权限类、频率类django配置文件介绍过滤类的其他使用全局异常处理接口文档内置认证类、权限类、频率类#内置的认证类 BasicAuthenticatio......
  • drf学习笔记
    今日内容概要内置认证类,权限类,频率类django的配置文件每个配置项的作用过滤类的其他使用全局异常处理接口文档今日内容详细内置认证类,权限类,频率类内置的认......
  • drf三大认证之频率类源码解析
    主要从SimpleRateThrottle的allow_request方法开始分析第一步1.查看SimpleRateThrottle的allow_requestifself.rateisNone:returnTrue#表示没......