java过滤器流程_DRF filter 过滤器实现流程
关系
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 过滤器实现流程相关推荐
- java filter过滤器_JavaWeb之 Filter(过滤器)
FIlter作用 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如 ...
- filter过滤器_JavaWeb之 Filter(过滤器)
FIlter作用 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如 ...
- Filter过滤器~~~编码过滤和登陆验证
Filter过滤器··简介: Filter过滤器是一个小型的web组件(web三大组件之一), 可以动态地拦截url请求和响应, 以便查看.提取或操作包含在url请求和响应中的信息. Filter过滤 ...
- javaweb(11) Listener监听器与Filter过滤器
javaweb(11) Listener监听器与Filter过滤器 Listener监听器 什么是Listener监听器 Listener 监听器它是 JavaWeb 的三大组件之一.JavaWeb ...
- Filter 过滤器的介绍及使用
Filter过滤器 MySql的语法看这篇就够了,传送地址:MySql必知必会 JSP的使用看这篇就够了,传送地址:JSP必知必会 文章目录 Filter过滤器 一.Filter过滤器的介绍 二.Fi ...
- (29) JavaWeb中使用filter过滤器拦截请求、权限检查,过滤响应。
Filter 过滤器 一.Filter 什么是过滤器 二.Filter 过滤器的使用步骤: 三.Filter 的生命周期 四.FilterConfig 类 五.FilterChain 过滤器链 六.F ...
- Filter过滤器执行流程
在上一篇博客我们进行了Filter的入门讲解,这里我们讲解Filter的执行流程,从下图可以大致了解到,当客户端发送请求的时候,会经过过滤器,然后才能到我们的servlet,当我们的servlet处理 ...
- java filter 不过滤器_Java中的Filter过滤器
Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...
- Filter 过滤器和 Listener 监听器,java面试必问底层
一.Filter 过滤器 1.概述 2.开发步骤 3.过滤器执行流程 4.过滤器生命周期 5.过滤器配置问题 6.过滤器链(配置多个过滤器) [二.Listener 监听器]( <一线大厂Jav ...
- java过滤器的执行顺序_Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序)...
Java Filter过滤器+Listen监听器 啥是过滤器 顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学. 但 ...
最新文章
- kml 解析 java_KML文件解析显示在地图
- 如何防止SQL注入 http://zhangzhaoaaa.iteye.com/blog/1975932
- 项目管理、测试管理、代码bug 管理
- MongoDB学习使用
- js之上传文件多图片预览
- Logback的配置说明
- html修改字体大小菜鸟,HTML字体大小颜色
- 测试环境的搭建和配置
- ubuntu安装PYQT4
- 正弦积分与余弦积分函数
- ARcore 相关学习
- 联想ghost重装系统_联想笔记本重装系统图文教程
- Redis设置登录密码
- ffmpeg 生成单色测试视频
- 北洋雷达UST-10LX基于ROS都安装使用测试小问题
- 巧妙复制网页中的文本——复制网页上不能复制的文字
- UNI-APP隐私政策问题无法上架
- (看得懂的)海明码的编码和校验方法
- 华为入局网约车,已在多个城市测试“ Petal 出行”应用
- IdentityServer4 DiscoveryClient找不到