python-DRF_自定制过滤器_分页器Pagination_异常处理_封装Response对象_自动生成接口文档

DRF-Django rest framework

1. 自定制过滤器

# 自定制过滤器 (源码流程)
	查询所有才会有过滤  
    ==>  list才需要过滤
    ==>  queryset = self.filter_queryset(self.get_queryset())  
    ==>  GenericAPIView  
    ==>  filter_queryset
    
# filter_queryset方法
    def filter_queryset(self, queryset):
        for backend in list(self.filter_backends):
            queryset = backend().filter_queryset(self.request, queryset, self)
            return queryset

# 使用方法        
    1. 写一个类MyFilter,继承BaseFilterBackend
    2. 重写filter_queryset方法,在该方法内部进行过滤(自己设置的过滤条件)
    3. 返回queryset对象(过滤后的queryset对象)
    4. 配置在视图类中
        filter_backends = [MyFilter,]	

2. 分页器Pagination

1. 分页介绍

1. 内置了三种分页器
	1. PageNumberPagination   普通分页
    2. LimitOffsetPagination  偏移分页
    3. CursorPagination       游标分页
    
2. 分页模式
	1. APIView
    2. GenericAPIView + ListModelMixin
    
3. 分页器使用 
	1. 一个视图函数只能使用一个分页器    	
    2. 如果在视图内关闭分页功能,只需在视图内设置 pagination_class = None

2. 可选分页器

1. PageNumberPagination
# 前端访问网址形式
	GET  http://127.0.0.1:8000/students/?page=4&size=3
            
# 可以在子类中定义的属性
    page_size              每页数目
    page_query_param       前端发送的页数关键字名,默认为”page”
    page_size_query_param  前端发送的每页数目关键字名,默认为None
    max_page_size          前端最多能设置的每页数量
    
	page_size = api_settings.PAGE_SIZE  # 每页显示多少条
    page_query_param = 'page'           # 查询参数
    page_size_query_param = size        # 查询的时候指定每页显示多少条
    max_page_size = 10                  # 每页最多显示多少条
    
# 使用方式
    1. 定义一个类,继承PageNumberPagination
    2. 重写四个属性
    3. 在继承了GenericAPIView + ListModelMixin视图类中配置
    	pagination_class = MyPageNumberPagination
    4. 查询
    	http://127.0.0.1:8000/students/?page=1&size=5    
                
# 示例
class MyPageNumberPagination(PageNumberPagination):
    page_size = 3
    page_query_param = 'page'
    page_size_query_param = 'size'
    max_page_size = 5

# GenericAPIView + ListModelMixin的分页模式  
# class StudentView(GenericViewSet,ListAPIView):
class StudentView(GenericViewSet,ListModelMixin):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer
    # 普通分页
    pagination_class = MyPageNumberPagination    
2. LimitOffsetPagination
# 前端访问网址形式
	GET  http://127.0.0.1/four/students/?limit=100&offset=400
        
# 可以在子类中定义的属性
    default_limit              默认限制,默认值与PAGE_SIZE设置一直
    limit_query_param limit    参数名,默认’limit’
    offset_query_param offset  参数名,默认’offset’
    max_limit                  最大limit限制,默认None

    default_limit = ap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I believe I can fly~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值