DRF序列化 限流配置、 ModelViewSet(过滤、排序、分页、序列化设置)

文章目录

      • DRF序列化 限流配置、 ModelViewSet(过滤、排序、分页、序列化设置)
        • 1、DRF序列化、限流配置
        • 限流(Throttling)配置
        • 使用
        • 2、ModelViewSet(过滤、排序、分页、序列化设置)
          • 序列化设置
          • 排序
          • 过滤

DRF序列化 限流配置、 ModelViewSet(过滤、排序、分页、序列化设置)


1、DRF序列化、限流配置

from rest_framework import  serializers
from.models import *

class UserSer(serializers.ModelSerializer):
    class Meta:
        model=User
        fields='__all__'       # 序列化的时候显示哪些字段  __all__代表所有
        depth=1   # 序列化外键关联的表 写1就是第一个表 2第二个表 3....

限流(Throttling)配置

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

使用

可以在配置文件中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES 进行全局配置

REST_FRAMEWORK={
'DEFAULT_THROTTLE_CLASSES':(
    'rest_framework.throttling.AnonRateThrottle',
    'rest_framework.throttling.UserRateThrottle'
),

'DEFAULT_THROTTLE_RATES':{
    'anon':'1000/day',
    'user':'1000/day'
}
}

DEFAULT_THROTTLE_RATES 可以使用second、minute、hour、或 day 来指明周期。

2、ModelViewSet(过滤、排序、分页、序列化设置)

  • 序列化设置
from rest_framework.viewsets import ModelViewSet
class UserView(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSer
#(子)路由配置
from django.urls import path,include
from app03 import views

from rest_framework.routers import DefaultRouter
router=DefaultRouter()
router.register('users',views.UserView)

urlpatterns = [
path('',include(router.urls))
]
排序

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

使用方法:

在类视图中设置filter_backends,使用rest_framework.filters.OrderingFilter 过滤器,REST framework会在请求的查询字符串参数中检查是否包含了ordering参数,则按照ordering参数指明的排序字段对数据集进行排序。

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

# 导包排序的包
from django_filters.rest_framework import DjangoFilterBackend
# 导包过滤的包
from rest_framework.filters import OrderingFilter


class UserView(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSer
    filter_backends = (OrderingFilter,DjangoFilterBackend)        # 排序 过滤
    ordering_fields = ('age',)      # 根据年龄排序   指定排序字段
过滤

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

pip install django-filter

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

INSTALLED_APPS = [
  'django_filters'       #需要注册应用
]

REST_FRAMEWORK={
    'DEFAULT_FILTER_BACKENDS':('django_filters.rest_framework.DjangoFilterBackend',)
}
  • 在视图中添加filter_fields属性,指定可以过滤的字段
  # 导包过滤的包
  from rest_framework.filters import OrderingFilter
  
  class UserView(ModelViewSet):
      queryset = User.objects.all()
      serializer_class = UserSer
  filter_fields = ('username', 'age')  # 添加filter_fields属性 指定过滤的字段

分页PageNumberPagination
可以在子类中定义的属性
page_size每页数目
page_query_param前端发送的页数关键字名,默认’page’
page_size_query_param前端发送的每页数目关键字名,默认为None
max_page_size 前端最多能设置的每页数量

from rest_framework.pagination import PageNumberPagination

# 局部自定义分页
class PagenumV(PageNumberPagination):
    # 代表每页返回数据数量的参数,默认值:none
    page_size_query_param = 'page_size'
    # 一页最多显示的条数
    max_page_size = 3   

class UserView(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSer
	pagination_class = PagenumV   #分页  

你可能感兴趣的:(DRF序列化 限流配置、 ModelViewSet(过滤、排序、分页、序列化设置))