分页过滤组件

复习

"""
1、celery框架
    定义:异步任务框架 - 独立运行的服务器,由三部分组成
        内部有socekt,可以起worker(执行任务)及beat(提交任务)两种socket
        三部分包含:存储任务的broker + 执行任务的worker + 存储结果的backend
        app_worker = Celery(broker, backend, include)

    作用:
        任务:@app.task装饰的函数
        异步任务:任务.delay() => 处理耗时的需求
        延迟任务:任务.apply_async(args,kwargs,eta) => 处理延迟的需求
        定时任务:完成任务的beat配置,启动beat服务 => 处理周期性的需求

    命令:
        celery worker -A 包|模块 -l info -P eventlet
        celery beat -A 包|模块 -l info

2、课程应用
    课程业务分析,表构建
        -- 免费课,实战课,轻课业务线独立(可以分表处理)
        -- 课程表家族:课程表,分类表,老师表,章节表,课时表
        -- 分类群查接口,课程群查接口
"""

分页组件

自定义分页类完成配置:paginations.py
from rest_framework import pagination

# 基础分页
class PageNumberPagination(pagination.PageNumberPagination):
    # 默认一页显示的条数
    page_size = 2
    # 查询页面的关键字
    page_query_param = 'page'
    # 用户自定义一页显示条数的关键字
    page_size_query_param = 'page_size'
    # 用户最大可自定义一页显示的条数
    max_page_size = 2

class LimitOffsetPagination(pagination.LimitOffsetPagination):
    # 默认一页显示的条数
    default_limit = 2
    # 用户自定义一页显示的条数
    limit_query_param = 'limit'
    # 用户自定义偏移的条数
    offset_query_param = 'offset'
    # 用户最大可自定义一页显示的条数
    max_limit = 2
群查接口的视图类:views.py
from . import paginations
class FreeCourseListViewSet(ListModelMixin, GenericViewSet):
    queryset = models.Course.objects.filter(is_delete=False, is_show=True).all()
    serializer_class = serializers.CourseModelSerializer

    # 配置某一个分页类即可
    pagination_class = paginations.PageNumberPagination
    # 注:接口分页前后,response的格式不一样
    #       分页前:数据是response.data
    #       分页后:数据是response.data.results

过滤

搜索

群查接口的视图类:views.py
from rest_framework.filters import SearchFilter
class FreeCourseListViewSet(ListModelMixin, GenericViewSet):
    queryset = models.Course.objects.filter(is_delete=False, is_show=True).all()
    serializer_class = serializers.CourseModelSerializer

    # 配置搜索组件
    filter_backends = [SearchFilter]
    # 配置参与搜索字段
    search_fields = ['name', 'brief']
    # 规则:
    #   参与全文搜索的字段为name和brief(两个字段必须都是数据库表字段)
    #   接口:?search=搜索关键字,会全文匹配name和brief两个字段

搜索

群查接口的视图类:views.py
from rest_framework.filters import OrderingFilter
class FreeCourseListViewSet(ListModelMixin, GenericViewSet):
    queryset = models.Course.objects.filter(is_delete=False, is_show=True).all()
    serializer_class = serializers.CourseModelSerializer

    # 配置排序组件
    filter_backends = [OrderingFilter]
    # 配置参与排序字段
    ordering_fields = ['price', 'id', 'students']
    # 规则:
    #       ?ordering=price 按价格升序
    #       ?ordering=-price 按价格降序
    #       ?ordering=id 按主键升序
    #       ?ordering=-price,id 按价格降序,价格相同时按主键升序

自定义

自定义过滤类:filters.py
# 自定义过滤器:自定义普通类,实现filter_queryset可以接受request, queryset, view返回过滤处理后的queryset即可
class MyFilter:
    def filter_queryset(self, request, queryset, view):
        # 过滤条件是死的,?count=数字,也可以写高级一点,从view中去反射配置信息,或者将配置信息放在settings中
        count = request.query_params.get('count', None)
        if not count:
            return queryset  # 没过滤
        try:
            count = int(count)
            return queryset[:count]  # 过滤
        except:
            return queryset  # 没过滤
群查接口的视图类:views.py
from .filters import MyFilter
class FreeCourseListViewSet(ListModelMixin, GenericViewSet):
    queryset = models.Course.objects.filter(is_delete=False, is_show=True).all()
    serializer_class = serializers.CourseModelSerializer

    # 配置排序组件
    filter_backends = [MyFilter]
    

分类与区间

安装django-filter插件
>: pip install django-filter
自定义过滤规则类:filters.py
from django_filters import filters
from . import models
class CourseFilterSet(FilterSet):
    # 实现区间:field_name关联model表属性,lookup_expr设置过滤规则
    min_price = filters.NumberFilter(field_name='price', lookup_expr='gte')
    max_price = filters.NumberFilter(field_name='price', lookup_expr='lte')
    class Meta:
        model = models.Course
        # min_price 和 max_price 自定义规则字段可以不在fields中配置
        fields = ['course_category']
群查接口的视图类:views.py
from django_filters.rest_framework import DjangoFilterBackend
from .filters import CourseFilterSet
class FreeCourseListViewSet(ListModelMixin, GenericViewSet):
    queryset = models.Course.objects.filter(is_delete=False, is_show=True).all()
    serializer_class = serializers.CourseModelSerializer

    # 配置过滤组件
    filter_backends = [DjangoFilterBackend]
    # 配置过滤规则的类
    filter_class = CourseFilterSet
    # 规则:
    #       ?course_category=1 课程分组1所有的课程
    #       ?min_price=10 课程价格大于等于10的所有课程
    #       ?min_price=10&max_price=100 课程价格大于等于10小于等于100的所有课程

A作业(必做)

"""
1、整理今天所学知识点

2、复习并掌握过滤组件:排序、搜索、分类筛选、区间筛选、分页
    完成课程群查接口:带排序、分页功能
    完成课程搜索接口:带搜索,分页功能
    完成课程单查接口
    完成课程章节群查接口:带分类

3、分析并看懂前台页面
    课程群查页面
    搜索页面
    课程详情页面

4、了解并完成七牛云视频托管
"""

B作业(选做)

"""
1、预习支付功能
    支付流程
    支付应用申请
    支付接口
    支付回调
2、项目上线
    服务器购买
    服务器环境
    前台项目上线
    后台项目上线
"""

原文地址:https://www.cnblogs.com/zhm-cyt/p/12188922.html

时间: 2024-10-06 22:46:25

分页过滤组件的相关文章

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 处

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 过滤插件(重点) 安装 自

过滤组件

过滤组件 群查排序过滤器 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 价格

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

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

【ExtJs】与后台数据库交互的带分页表格组件grid的查询

ExtJs的表格组件Grid是可以分页的,并且这个组件是随时随地地与后台数据库进行这交互.正如VC的MFC中的List表格控件一样. 基本上,这个表格控件作为OA系统的主角,配合<[ExtJs]利用树状结构.Border布局与标签页刻划OA界面>(点击打开链接)就真的是一个完整的OA系统了. 然而网上对于此组件的叙述非常糟糕,各类杂七杂八的资料,层出不同的后端语言,让人根本看不明白.下面举一个例子来说明Grid组件怎么查询数据库的数据,并且分页现实出来. 一.基本目标 比如Mysql数据库有一

五:Vue之ElementUI 表格Table与分页Pagination组件化

(注:本文适用于有一定Vue基础或开发经验的读者,文章就知识点的讲解不一定全面,但却是开发过程中很实用的) 在平时的web项目开发过程中,列表分页查询展示应用的很频繁,为了便于阅读并减少代码的冗余,所以对ElementUI的表格和分页组件进行了二次封装. 首先在工程下的components目录下创建common文件夹并新建commonTable.vue文件,添加如下代码: <template> <div id="commonTable"> <el-tabl

分页过滤SQL求总条数SQL正则

public static void main(String[] args) throws Exception { String queryForScanUsers_SQL = "select a.username AS user_name,b.* from tbl_aaa a left join tbl_bbb b where a.id=? limit 10"; //去除WHERE和LIMIT String sqlRegex = "(select\\s+)(.*)(\\s+