关系

ListModelMixin

GenericAPIView(views.APIView).filter_queryset(queryset)

drf filters.py

BaseFilterBackend

SearchFilter(BaseFilterBackend)

OrderingFilter(BaseFilterBackend)

DjangoFilterBackend(metaclass=RenameAttributes)# django_filters.rest_framework.backends 官方filterdemo

1.入口queryset = self.filter_queryset(self.get_queryset())

views.py

class RecordView(MyModelViewSet):

"""

user view

"""

queryset = Record.objects.filter(status__gte=0)

permission_classes = (permissions.IsAuthenticated, )

filterset_class = RecordFilter # 定义过滤器

serializer_map = {

'create': AuthorizationRecordCreateSerializer,

}

class ListModelMixin:

"""

List a queryset.

"""

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)

class GenericAPIView(views.APIView):

queryset = None

serializer_class = None

# If you want to use object lookups other than pk, set 'lookup_field'.

# For more complex lookup requirements override `get_object()`.

lookup_field = 'pk'

lookup_url_kwarg = None

# The filter backend classes to use for queryset filtering

filter_backends = api_settings.DEFAULT_FILTER_BACKENDS

def filter_queryset(self, queryset):

"""

Given a queryset, filter it with whichever filter backend is in use.

You are unlikely to want to override this method, although you may need

to call it either from a list view, or from a custom `get_object`

method if you want to apply the configured filtering backend to the

default queryset.

"""

for backend in list(self.filter_backends):

queryset = backend().filter_queryset(self.request, queryset, self)

return queryset

class DjangoFilterBackend(metaclass=RenameAttributes):

filterset_base = filterset.FilterSet

raise_exception = True

def get_filterset(self, request, queryset, view):

filterset_class = self.get_filterset_class(view, queryset) # 1.获取过滤器类

if filterset_class is None:

return None

kwargs = self.get_filterset_kwargs(request, queryset, view) # 2.获取request.query_params过滤参数, 进行下一步过滤

return filterset_class(**kwargs) # 3.实例化过滤器

def get_filterset_class(self, view, queryset=None):

"""

Return the `FilterSet` class used to filter the queryset.

"""

filterset_class = getattr(view, 'filterset_class', None) # views 用户定义

filterset_fields = getattr(view, 'filterset_fields', None) #

# TODO: remove assertion in 2.1

if filterset_class is None and hasattr(view, 'filter_class'):

utils.deprecate(

"`%s.filter_class` attribute should be renamed `filterset_class`."

% view.__class__.__name__)

filterset_class = getattr(view, 'filter_class', None)

# TODO: remove assertion in 2.1

if filterset_fields is None and hasattr(view, 'filter_fields'):

utils.deprecate(

"`%s.filter_fields` attribute should be renamed `filterset_fields`."

% view.__class__.__name__)

filterset_fields = getattr(view, 'filter_fields', None)

if filterset_class:

filterset_model = filterset_class._meta.model

# FilterSets do not need to specify a Meta class

if filterset_model and queryset is not None:

assert issubclass(queryset.model, filterset_model), \

'FilterSet model %s does not match queryset model %s' % \

(filterset_model, queryset.model)

return filterset_class

if filterset_fields and queryset is not None:

MetaBase = getattr(self.filterset_base, 'Meta', object)

class AutoFilterSet(self.filterset_base):

class Meta(MetaBase):

model = queryset.model

fields = filterset_fields

return AutoFilterSet

return None

def get_filterset_kwargs(self, request, queryset, view): # 从request.query_parmas 获取过滤参数

return {

'data': request.query_params,

'queryset': queryset,

'request': request,

}

def filter_queryset(self, request, queryset, view): # APIView 入口

filterset = self.get_filterset(request, queryset, view)

if filterset is None:

return queryset

if not filterset.is_valid() and self.raise_exception:

raise utils.translate_validation(filterset.errors)

return filterset.qs

java过滤器流程_DRF filter 过滤器实现流程相关推荐

  1. java filter过滤器_JavaWeb之 Filter(过滤器)

    FIlter作用 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如 ...

  2. filter过滤器_JavaWeb之 Filter(过滤器)

    FIlter作用 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如 ...

  3. Filter过滤器~~~编码过滤和登陆验证

    Filter过滤器··简介: Filter过滤器是一个小型的web组件(web三大组件之一), 可以动态地拦截url请求和响应, 以便查看.提取或操作包含在url请求和响应中的信息. Filter过滤 ...

  4. javaweb(11) Listener监听器与Filter过滤器

    javaweb(11) Listener监听器与Filter过滤器 Listener监听器 什么是Listener监听器 Listener 监听器它是 JavaWeb 的三大组件之一.JavaWeb ...

  5. Filter 过滤器的介绍及使用

    Filter过滤器 MySql的语法看这篇就够了,传送地址:MySql必知必会 JSP的使用看这篇就够了,传送地址:JSP必知必会 文章目录 Filter过滤器 一.Filter过滤器的介绍 二.Fi ...

  6. (29) JavaWeb中使用filter过滤器拦截请求、权限检查,过滤响应。

    Filter 过滤器 一.Filter 什么是过滤器 二.Filter 过滤器的使用步骤: 三.Filter 的生命周期 四.FilterConfig 类 五.FilterChain 过滤器链 六.F ...

  7. Filter过滤器执行流程

    在上一篇博客我们进行了Filter的入门讲解,这里我们讲解Filter的执行流程,从下图可以大致了解到,当客户端发送请求的时候,会经过过滤器,然后才能到我们的servlet,当我们的servlet处理 ...

  8. java filter 不过滤器_Java中的Filter过滤器

    Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...

  9. Filter 过滤器和 Listener 监听器,java面试必问底层

    一.Filter 过滤器 1.概述 2.开发步骤 3.过滤器执行流程 4.过滤器生命周期 5.过滤器配置问题 6.过滤器链(配置多个过滤器) [二.Listener 监听器]( <一线大厂Jav ...

  10. java过滤器的执行顺序_Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序)...

    Java Filter过滤器+Listen监听器 啥是过滤器 顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学. 但 ...

最新文章

  1. kml 解析 java_KML文件解析显示在地图
  2. 如何防止SQL注入 http://zhangzhaoaaa.iteye.com/blog/1975932
  3. 项目管理、测试管理、代码bug 管理
  4. MongoDB学习使用
  5. js之上传文件多图片预览
  6. Logback的配置说明
  7. html修改字体大小菜鸟,HTML字体大小颜色
  8. 测试环境的搭建和配置
  9. ubuntu安装PYQT4
  10. 正弦积分与余弦积分函数
  11. ARcore 相关学习
  12. 联想ghost重装系统_联想笔记本重装系统图文教程
  13. Redis设置登录密码
  14. ffmpeg 生成单色测试视频
  15. 北洋雷达UST-10LX基于ROS都安装使用测试小问题
  16. 巧妙复制网页中的文本——复制网页上不能复制的文字
  17. UNI-APP隐私政策问题无法上架
  18. (看得懂的)海明码的编码和校验方法
  19. 华为入局网约车,已在多个城市测试“ Petal 出行”应用
  20. IdentityServer4 DiscoveryClient找不到

热门文章

  1. 施密特:下个千亿美元市值公司将出在哪个行业
  2. 论网络工程中,系统开发设计可行性研究及市面产品对比!
  3. WPF 3D:简单的Point3D和Vector3D动画创造一个旋转的正方体
  4. git分支创建分支删除分支合并
  5. H3C WA2220E-AG 设置本地MAC+PSK认证:mac-and-psk
  6. UML类与类的关系, 总算理解了关联和依赖在实际中的区别
  7. Github上托管项目
  8. style样式:json对象和字符串相互转化
  9. 入门嵌入式HTML/CSS/脚本引擎 sciter(问题篇)
  10. Layui layui-soul-able 组件 表格列进行拖拽