drf:过滤Filtering、排序OrderingFilter、异常处理Exceptions、分页Pagination、自动生成接口文档

本文介绍了Django REST framework中如何进行过滤、排序、异常处理和分页操作。详细讲解了内置过滤类SearchFilter、自定义过滤类BaseFilterBackend的使用,OrderingFilter排序,异常处理Exceptions,包括APIException及其子类。同时,讨论了PageNumberPagination、LimitOffsetPagination和CursorPagination三种分页方式,并展示了如何设置和自定义分页。最后,文章还提到了如何利用REST framework生成接口文档。
摘要由CSDN通过智能技术生成

一、 过滤 Filtering

1.1 内置过滤类的使用SearchFilter

1 在视图类views.py中(必须继承GenericAPIView)
from app01 import models
from app01 import serializer
from rest_framework.viewsets import ModelViewSet
from rest_framework.filters import SearchFilter # 导入内置过滤类class BookView(ModelViewSet):
    queryset = models.Book.objects.all()
    serializer_class = serializer.BookModelSerializer
    # 配置过滤类(局部使用)
    filter_backends = [SearchFilter,]
    # 配置过滤字段
    search_fields = ['name''price']
    
    
2 浏览的地址:
    # 查询的时候,所有条件都给search,并支持模糊匹配,search可以是name字段,也可以是price
    http://127.0.0.1:8000/book/?search=红精灵
    http://127.0.0.1:8000/book/?search=11
            
3 全局使用:在settings.py配置文件中配置
REST_FRAMEWORK = {
   
    'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.SearchFilter',)
}

在这里插入图片描述

1.2 第三方过滤类使用(django-filter)BookModelSerializer

内置的SearchFilter过滤类,功能一般,如果你想实现更高级的过滤,自己写,使用第三方

我们可以通过添加django-fitlter扩展来增强支持。

1 安装(django:2.2, 3.1, 3.2)
	pip install django-filter

2 需要注册应用
INSTALLED_APPS = [
    ...
    'django_filters',  
]

3 在视图类views.py中(必须继承GenericAPIView)添加filter_fields属性,指定可以过滤的字段
from app01 import models
from app01 import serializer
from rest_framework.viewsets import ModelViewSet
from django_filters.rest_framework import DjangoFilterBackend # 导入第三方过滤类class BookView(ModelViewSet):
    queryset = models.Book.objects.all()
    serializer_class = serializer.BookModelSerializer 
​
    # 使用第三方
    # 配置过滤类(局部使用)
    filter_backends=[DjangoFilterBackend,]
    # 配置过滤字段
    filter_fields=['name','price']
    
4 浏览的地址:
    # 查询可以通过字段查询,但不支持模糊查询
    http://127.0.0.1:8000/book/?price=11&name=红精灵
   http://127.0.0.1:8000/book/?price=11
              
        
5 全局使用:在settings.py配置文件中配置
​
REST_FRAMEWORK = {
   
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}

在这里插入图片描述

1.3 自定义过滤类(BaseFilterBackend)

1 写一个类,继承第三方过滤类(最好自定义一个py文件,auth.py)
from rest_framework.filters import BaseFilterBackend
class Myfilter(BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        name = request.GET.get('name')
        queryset = queryset.filter(name__contains=name)
        return queryset
    
2 在视图类views.py中配置
from app01 import models
from app01 import serializer
from rest_framework.viewsets import ModelViewSet
from app01.auth import Myfilter # 导入自定义过滤类
class BookView(ModelViewSet):
    queryset = models.Book.objects.all()
    serializer_class = serializer.BookModelSerializer
     ## 自己定义的
    filter_backends = [Myfilter
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值