ModelViewSet里过滤,排序,分页,序列化设置

限流Throttling

可以对接口访问的频次进行限制,以减轻服务器压力。

使用

可以在配置文件中,使用 DEAULT_THROTTLE_CLASSDEFAULT_THROTTLE_RATES进行全局配置,

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle',
    ),
    'DEFAULT_THROTTLE_RATES': {
        'anon': '100/day',
        'user': '1000/day'
    },
}

DEFAULT_THROTTLE_RATES 可以使用 second,minute.hour 或 day来实名周期

过滤Filtering

对于列表数据可能需要根据字段进行过滤,我们可以通过django-fitlter扩展来增强支持

pip install django-filter

在配置文件总增加过滤后端的设置:

INSTALLED_APPS=[
	....
	'django_filters'
]
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS':('django_filters.rest_framework.DjangoFilterBackend',)
}

在视图中添加filter_fields属性,指定可以过滤的字段

class BookLIstView(ListAPIView):
		queryset=BookInfo.objects.all()
		serializer_class=BookInfoSerializer
		filter_fields=('btitle','bread')
#127.0.0.1:8000/books/?btitle='西游记'

排序

对于列表数据,REST framewotk提供了ORderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序

使用方法:

在类视图中设置filter_backends,使用rest_framework.filters.OrderingFilter过滤器,REST

framework会在请求的查询字符串参数中检查是否包含了ordering参数,如果包含了ordering参数,则按照ordering参数指明的排序字段对数据集进行排序。

前端可以传递的ordering参数的可选字段值需要在ordering_fields中指明。

class BookListView(ListAPIView ):
		queryset = BookInfo.objects.all()
		serializer_class = BookInfoSerializer
		filter_backends = [orderingFilter]
		ordering_fields = ( 'id ', 'bread ' , 'bpub_date' )
#127.0.0.1:8000/books/ ?ordering=-bread

分页PageNumberPagination

前端访问网址形式:

GET http://api.example.org/books/?page=4

可以在子类中定义的属性:

• page_size 每页数目

• page_query_param 前端发送的页数关键字名,默认为"page"

• page_size_query_param 前端发送的每页数目关键字名,默认为None

• max_page_size 前端最多能设置的每页数量

from rest_framework.pagination import PageNumberPagination

class StandardPageNumberPagination(PageNumberPagination):
    page_size_query_param ='page_size'
    max_page_size=10
    
class BookListView(ListAPIView):
    queryset = BookInfo.objects.all().order_by('id')
    serializer_class = BookInfoSerializer
    pagination_class = StandardPageNumberPagination
    
# 127.0.0.1/books/?page=1&page_size=2
原文地址:https://www.cnblogs.com/li-xiao-yang/p/13893666.html