首页 > 其他分享 >过滤,分页,异常处理

过滤,分页,异常处理

时间:2023-09-07 15:47:15浏览次数:31  
标签:分页 price queryset filter 过滤 异常 page name

1 过滤

 只针对于 查询所有接口
 必须继承 GenericAPIView

# 安装:
	pip install django==3.2.12
    pip install django-filter
    
    
# 使用方式:三种
	-方式一:内置的
    # 查询方式http://127.0.0.1:8000/books/?search=29  #模糊匹配: 只要名字中有29或价格中有29都能搜出来
    # filter_backends = [SearchFilter, OrderingFilter]
    # search_fields = ['name', 'price']	
    
    -方式二:第三方
    # http://127.0.0.1:8000/books/?name=红楼梦
    # http://127.0.0.1:8000/books/?price=19&name=西游记
    # filter_backends = [DjangoFilterBackend]
    # filterset_fields=['name','price']
    
    -方式三:自定义--完全自己控制
    # http://127.0.0.1:8000/books/?price=19&name=书
    # filter_backends = [MyFilter]  # 我自己知道按哪些字段过滤
    # 需要写过滤类(下面)
    
from rest_framework.filters import BaseFilterBackend
from django.db.models import Q


class MyFilter(BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        # 基于queryset 进行过滤,过滤后返回即可
        # http://127.0.0.1:8000/books/?name=书   # 名字中有书的就查出来
        search_param = request.query_params.get('name')
        price = request.query_params.get('price')
        if search_param and price:
            # queryset = queryset.filter(Q(name__contains=search_param) | Q(price=price))  # qs对象的filter
            queryset = queryset.filter(name__contains=search_param,price=price)  # qs对象的filter
        return queryset

1.1 继承APIView写过滤和排序

#### 继承APIView 写过滤,写排序
class BookView(ViewSetMixin, APIView):
    def list(self, request, *args, **kwargs):
        # 按名字过滤
        print('asfdasdf')
        name = request.query_params.get('name')
        book_list = Book.objects.all().filter(name__contains=name)
        ser = BookSerializer(instance=book_list, many=True)
        return Response(ser.data)

1.2 继承GenericAPIView写过滤类,可以写多个

 写多个,他们是从左往右,依次执行
 大原则,配置多个过滤类的时候,第一个放尽量多个过滤掉数据
 配置多个:执行原理
	-先执行第一个过滤类的:filter_queryset返回qs对象
    -再执行第二个过滤类的filter_queryset,传入上一个返回的qs,过滤完返回qs对象

2 分页

相关文章

  • pagehelper分页框架进行定时跑批分页 在插入与sql语句的编写,当插入有库中有报异常显示
    以下是一个示例的业务类,使用PageHelper分页框架进行定时跑批分页插入操作,并在遇到重复数据时跳过继续插入:importcom.github.pagehelper.PageHelper;importcom.github.pagehelper.PageInfo;importorg.springframework.beans.factory.annotation.Autowired;importorg.spring......
  • ABP-数据过滤器(Fliter)
    过滤器文档地址ABP预定义过滤器过滤器禁用对于默认启动的过滤器,可以使用using语句临时禁用,也可全局禁用using语句临时禁用软删除过滤using(CurrentUnitOfWork.DisableAuditing(AbpDataFilters.SoftDelete)){varlist=_approvaloperaterecordsRepository.GetAll();}us......
  • SpringBoot学习之配置MyBatis常见异常
    Invalidboundstatement(notfound)出现原因和解决方法: 常见原因:1.mapper.xml中namespace和实际mapper接口所在的位置不一致。2.mapper.xml中的id名称和maapper接口中的方法名称不一致。3.如果上述两点都没有问题,那么大概率是application配置文件有配置错误。 程序和S......
  • 内存隔离-分段-分页
    内存隔离程序是运行在内存中,不同程序之间需要做地址隔离,不然恶意程序会修改其他程序的数据,不好的程序会越界修改变量。因此,内存需要对进程进行隔离,让每个进程拥有独立的虚拟空间分段内存映射根据程序所需空间大小,在虚拟内存空间划分出一定的区域大小然后在实际物理内存中......
  • MySQL系列之主从复制进阶——延时从库、半同步、过滤复制、GTID复制
    目录1.延时从库1.1介绍1.2为什么要有延时从1.3配置延时从库1.4延时从库应用1.4.1故障恢复思路1.4.2故障模拟及恢复2.半同步***2.1半同步复制工作原理的变化2.2配置半同步复制3.过滤复制3.1说明4.GTID复制4.1GTID引入4.2GTID介绍4.3GTID核心参数4.4......
  • 【异常处理】java: 无法访问org.springframework.boot.SpringApplication
    java:无法访问org.springframework.boot.SpringApplication错误的类文件:/D:/Repository/org/springframework/boot/spring-boot/3.0.5/spring-boot-3.0.5.jar!/org/springframework/boot/SpringApplication.class类文件具有错误的版本61.0,应为52.0请删除该文件......
  • DRF----分页、路由、解析器
    1.5djangorestframework(下)drf内置了很多便捷的功能,在接下来的课程中会给大家依次讲解下面的内容:快速上手请求的封装版本管理认证权限限流序列化视图条件搜索分页路由解析器  10.分页在查看数据列表的API中,如果数据量比较大,肯定......
  • 软件测试|MySQL DISTINCT关键字过滤重复数据
    简介在MySQL中,有时候我们需要从表中检索唯一的、不重复的数据。这时,我们可以使用DISTINCT关键字来过滤掉重复的数据行。在本文中,我们将深入探讨MySQL中DISTINCT的用法以及如何在查询中使用它来得到不重复的结果集。基本语法DISTINCT关键字用于在SELECT语句中指示查询结果中去除重复......
  • falsk分页详细描述
    Flask-SQLAlchemy也提供了一个paginate()查询方法,相关源码如下defpaginate(self,page=None,per_page=None,error_out=True,max_per_page=None):"""Returns``per_page``itemsfrompage``page``.If``page``or``per_page``are``None``,they......
  • 一行代码美化Python异常输出
     安装python-mpipinstallpretty_errors使用先来试试一个简单的错误。importpretty_errorsprint(1/0) 如果不使用pretty_errors报错信息如下:   bug少的时候,可能没有什么太大区别,当报错信息铺满一整页,差距就体现出来了 个性化配置如需......