ModelViewSet全局/局部配置分页,过滤器,限次,排序

本文介绍了如何在Django的ModelViewSet中进行全局和局部的分页设置,以及如何实现过滤、限次和排序功能。通过添加过滤条件、分页参数和排序字段,可以灵活地控制API的返回结果。同时,文章还展示了过滤器和排序的联合使用方法。

全局配置过滤器

  • 下载所需要的第三方包
  • pip install django-filter
# 在settings.py中注册过滤器
INSTALLED_APPS = [
    'django_filters'
]
# 在settings.py中配置全局过滤器
REST_FRAMEWORK = {
    # 过滤器
    'DEFAULT_FILTER_BACKENDS': (
        'django_filters.rest_framework.DjangoFilterBackend')
}
  • 使用过滤器
# views.py
from rest_framework.viewsets import ModelViewSet
from app01.sers import User,UserSer
from django_filters.rest_framework import DjangoFilterBackend


# 使⽤全局过滤器
class UserModelView(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSer
    filter_fields = ('username', 'age', 'home')


# 局部使⽤过滤器
class UserModelView(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSer
    # 局部配置
    filter_backends = [OrderingFilter, DjangoFilterBackend]
    filter_fields = ('username', 'age', 'home')
  • 请求时在get请求⾥最后加上对应的条件
  • http://127.0.0.1:8000/dm3/user/?home=北京&username=张三

全局分页

# 在settings.py中配置全局分页
REST_FRAMEWORK = {
    # 分页
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 3  # 每页数目
}
  • 请求时在get请求⾥最后加上对应的条件
  • http://127.0.0.1:8000/dm3/user/?page=3

局部分页

# 在views.py中配置局部分页
from rest_framework.viewsets import ModelViewSet
from rest_framework.pagination import PageNumberPagination
from app01.sers import User,UserSer


class MyPage(PageNumberPagination):
    page_size_query_param = "max_page"
    page_query_param = "page"


class UserModelView(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSer
    pagination_class = MyPage
  • 请求时在get请求⾥最后加上对应的条件
  • http://127.0.0.1:8000/dm3/user/?page=3&max_page=3

限次

# 在settings.py中配置
REST_FRAMEWORK = {
    # 限次
    'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ),
    'DEFAULT_THROTTLE_RATES': {
        'anon': '3/day',
        'user': '1000/day'
    }

排序

  • 配置
#全局配置
REST_FRAMEWORK = {
 'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.OrderingFilter',)
}
  • 使用
from rest_framework.viewsets import ModelViewSet
from rest_framework.filters import OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.pagination import PageNumberPagination
from app01.sers import User,UserSer


# 全局配置使⽤
class UserModelView(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSer
    ordering_fields = ('age', 'hight')


# 局部配置使⽤
class UserModelView(ModelViewSet):
 queryset = dm1model.User.objects.all()
 serializer_class = dm3ser.UserSer
 filter_backends = [OrderingFilter] #申明配置排序过滤器
 ordering_fields = ("age","hight")
  • 请求时在get请求⾥最后加上对应的条件
  • http://127.0.0.1:8000/dm3/user/?ordering=hight

过滤和排序联合使用

  • 配置
##########settings.py中配置##########
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': (
        'django_filters.rest_framework.DjangoFilterBackend',
        'rest_framework.filters.OrderingFilter')
}
  • 使用
from rest_framework.viewsets import ModelViewSet
from rest_framework.filters import OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend
from app01.sers import User,UserSer


class UserModelView(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSer
    # 如果未设置全局,需局部配置
    # filter_backends = [OrderingFilter, DjangoFilterBackend]
    ordering_fields = ('age', 'hight')
    filter_fields = ('username', 'age', 'home')
  • 请求时在get请求⾥最后加上对应的条件
  • http://127.0.0.1:8000/dm3/user/?ordering=hight&home=“北京”
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值