过滤组件

过滤组件

群查排序过滤器

drf写好的

第一步
from rest_framework.filters import OrderingFilter

第二步
局部配置过滤器
filter_backends = [OrderingFilter,]
参与排序的字段: ordering=-price,id
ordering_fields = [‘price‘, ‘id‘, ‘students‘]

第三步
请求链接样式
http://127.0.0.1:8080?ordering=-price,id
价格排序完一样的按照id排序

自定义群查过滤器(限制数据的个数)

第一步
在创建的app文件夹下面创建一个filters.py文件,名字随便

第二步
from rest_framework.filters import BaseFilterBackend
重写类继承BaseFilterBackend,重写filter_queryset方法

from rest_framework.filters import BaseFilterBackend

class LimitFilter(BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        li = request.query_params.get('li')
        try:
            # 取得到返回的是处理过后的queryset, 但是li可能是不是数字
            return queryset[:int(li)]
        except:
            # 取不到返回原来的
            return queryset

第三步
导入自定义过滤器
from .filters import LimitFilter

第四步
配置过滤器
filter_backends = [LimitFilter,]

群查搜索过滤器

第一步
from rest_framework.filters import SearchFilter

第二步
配置过滤器
filter_backends = [SearchFilter,]

第三步
配置可搜索的字
search_fields = [‘name‘, ‘brief‘]
search解决的是全文搜索(也就是当前接口的序列化类连接的表中的字段)
连表的字段无法查询

第四步
请求链接样式
http://127.0.0.1:8080?search=python

群查分页器过滤器

一个类只能配置一个分页器
第一步
在创建的app文件夹下面创建一个paginations.py文件,名字随便

第二步
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
重写类继承

  1. BaseFilterBackend(普通分页器),
  2. LimitOffsetPagination(偏移分页器),
  3. CursorPagination(排序分页器)

重写filter_queryset方法
代码:

from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination

# 普通分页器
class CoursePageNumberPagination(PageNumberPagination):
    # 默认一页条数
    page_size = 2
    # 选择哪一页的key
    page_query_param = 'page'
    # 一般不开放自定义
    # 用户自定义一页条数
    page_size_query_param = 'page_size'
    # 用户自定义一页最大控制条数
    max_page_size = 10

# 偏移分页器(可以从第几条加载到第几条)
class CourseLimitOffsetPagination(LimitOffsetPagination):
    # 默认一页条数
    default_limit = 2
    # 从offset开始往后显示limit条
    limit_query_param = 'limit'
    offset_query_param = 'offset'
    max_limit = 2

# 排序分页器(按照规则排序并且分页)
class CourseCursorPagination(CursorPagination):
    cursor_query_param = 'cursor'
    page_size = 2
    page_size_query_param = 'page_size'
    max_page_size = 2
    # ordering = 'id'  # 默认排序规则,不能和排序过滤器OrderingFilter共存

第三步
导入自定义分页器
from .paginations import CoursePageNumberPagination, CourseLimitOffsetPagination, CourseCursorPagination

第四步
配置自定义分页器(同一个接口下面只能配置一个分页器)
pagination_class = CoursePageNumberPagination
pagination_class = CourseLimitOffsetPagination
pagination_class = CourseCursorPagination

分类筛选过滤器

安装django-filter插件

需要安装 django-filter 插件
pip install django-filter
django-filter里面重写了djangorest_frameworkfilter,意味着既可以做前后端 不分离的分类筛选,也可以做前后端分离的分类筛选.

分类过滤器的使用

第一步
安装django-filter模块

第二步
导包
from django_filters.rest_framework import DjangoFilterBackend

第三步
配置分类过滤器
filter_backends = [DjangoFilterBackend,]

第四步
配置分类字段(必须是序列化表中有的字段,可以是外键字段)
filter_fields = [‘course_category‘]

第五步
请求链接样式
http://127.0.0.1:8080?course_category=2

区间筛选过滤器

基于django-filter插件, 完成指定区间筛选(一般是针对于数字字段)

第一步
在创建的app文件夹下面创建一个filters.py文件,名字随便

第二步
导入所需模块
from django_filters.rest_framework.filterset import FilterSet
from django_filters.rest_framework import filters
继承 FilterSet
类似于写序列化类的方式重写
NumberFilter: filters提供的数据类型,还有很多对应的数据类型
lte: 小于等于
gte: 大于等于
field_name: 指定可以区间分类的字段,而且必须是序列化类中的序列化的字段
代码:

from django_filters.rest_framework.filterset import FilterSet
from django_filters.rest_framework import filters
from . import models

class CourseFilterSet(FilterSet):
    # 价格小于指定价格(lte)
    max_price = filters.NumberFilter(field_name='price', lookup_expr='lte')
    # 价格大于指定价格(gte)
    min_price = filters.NumberFilter(field_name='price', lookup_expr='gte')

    class Meta:
        model = models.Course
        fields = ['price', 'max_price', 'min_price']

第三步
导包
from django_filters.rest_framework import DjangoFilterBackend
导入自定义分类过滤器类
from .filters import CourseFilterSet
配置过滤器类
filter_backends = [DjangoFilterBackend]
配置
filter_fields = [‘course_category‘] - django_filter帮我们写的
filter_class = CourseFilterSet - 我们自己自定义的分类过滤

原文地址:https://www.cnblogs.com/xiongchao0823/p/11986519.html

时间: 2024-11-10 06:35:32

过滤组件的相关文章

Spring自动注解装配、自动检测装配Bean配合过滤组件使用

自动注解装配 当我们使用注解装配时,需要在XML文件中配置: <context:annotation-config/>那么我们就可以使用基于注解的自动装配 Spring支持几种不同的自动注解装配 [email protected] :Spring会尝试使用byType的自动装配方式 例如:  @Autowired publicPeople(Language language) { this.language =language; language.say(); } @Autowired pub

DRF框架(八)——drf-jwt手动签发与校验、过滤组件、筛选组件、排序组件、分页组件

自定义drf-jwt手动签发和校验 签发token源码入口 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口,不然进不了登录页面 获取提交的username和password 1)rest_framework_jwt.views.ObtainJSONWebToken 的 父类 JSONWebTokenAPIView 的 post 方法 接受有username.password的post请求校验数据,并且签发token 2)post方法将请求数据交给 r

签发token、校验token、多方式登录签发token的实现、自定义认证反爬规则的认证类、admin使用自定义User表:新增用户密码密文、群查接口各种筛选组件数据准备、drf搜索过滤组件、drf排序过滤组件、drf基础分页组件

签发token 源码入口 # 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口 # 1)rest_framework_jwt.views.ObtainJSONWebToken 的 父类 JSONWebTokenAPIView 的 post 方法 # 接收有username.password的post请求 # 2)post方法将请求得到的数据交给 rest_framework_jwt.serializer.JSONWebTokenSerializer 处

分页过滤组件

复习 """ 1.celery框架 定义:异步任务框架 - 独立运行的服务器,由三部分组成 内部有socekt,可以起worker(执行任务)及beat(提交任务)两种socket 三部分包含:存储任务的broker + 执行任务的worker + 存储结果的backend app_worker = Celery(broker, backend, include) 作用: 任务:@app.task装饰的函数 异步任务:任务.delay() => 处理耗时的需求 延迟任务

DRF的分页组件,过滤组件

目录 一.DRF中的分页组件 1. 分页组件的使用 二.DRF的过滤组件 1. 搜索过滤组件的使用 2. 排序过滤组件的使用 3. 自定义过滤类 三.过滤组件之分类与区间 1. 分类与区间的使用 四.VUE前端播放器组件 一.DRF中的分页组件 DRF自带的分页组件帮我们写好了分页功能,包括各种小问题的优化,已经能满足实际开发的需求. 这里介绍了DRF的两种分页组件 基础分页组件 偏移分页组件 1. 分页组件的使用 使用方法:类似DRF的序列化的使用方式 1. 新建一个pagination.py

DRF ---- 过滤组件 分页组件 过滤组件插件使用

目录 DRF过滤组件 1 源码分析: 2 全局配置 过滤 类们 3 局部配置 过滤 类们 4 系统提供 过滤 类们 OrderingFilter(排序过滤) SearchFilter(查询过滤) 联合使用 DRF分页组件 1 全局配置 2 局部配置 3 PageNumberPagination基础分页 4 LimitOffsetPagination偏移分页 5 CursorPagination游标分页 加密分页(了解) 6.自定义过滤器 7 django-filter 过滤插件(重点) 安装 自

rest framework之过滤组件

一.普通过滤 1.get_queryset get_queryset方法是GenericAPIView提供的一个方法,旨在返回queryset数据集,而过滤就是要在这个方法返回数据集之前对数据进行筛选,然后返回筛选后的数据即可,那么也就是要求需要重写这个方法: def get_queryset(self): """ Get the list of items for this view. This must be an iterable, and may be a query

react实现简单表格过滤组件

1.index.html <!DOCTYPE html> <html> <head> <style> input{ border:5px solid #b5dad7; height:50px; width:452px; text-align:center; } td{ border:1px solid grey; width:150px; height:40px; text-align:center; } th{ border:1px solid grey;

drf_jwt手动签发与校验-drf小组件:过滤-筛选-排序-分页

签发token 源码的入口:完成token签发的view类里面封装的方法. 源码中在请求token的时候只有post请求方法,主要分析一下源码中的post方法的实现. settings源码: 总结: 源码的入口 # 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口 # 1)rest_framework_jwt.views.ObtainJSONWebToken 的 父类 JSONWebTokenAPIView 的 post 方法 # 接受有usernam