DRF常用功能

ModelViewSet过滤,排序,分页,限流设置

路由设置
# 进行导包
from django.urls import path,include
from .views import *
from rest_framework.routers import SimpleRouter,DefaultRouter
# 设置路由
router = DefaultRouter()
router.register('users',UserModelApi)  # users是路由地址,UserModelApi是视图里的类方法

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('router.urls'))
]
过滤
# 过滤功能需要导包
from rest_framework.filters import OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend

# 添加过滤功能,指定字段进行过滤查询
filter_backends = (DjangoFilterBackend,OrderingFilter)
filter_fields = ['username']  # 类模型里的字段名,路由里的参数
排序
# 排序功能需要导包
from rest_framework.filters import OrderingFilter
# 排序功能
ordering_fields = ('需要排序的字段名',‘age’)   # 需要从路由上传参ordering,默认为id
分页
# 分页功能需要导包
from rest_framework.pagination import PageNumberPagination

# 分页(局部):自定义分页器 局部
class PageNum(PageNumberPagination):
	# 查询字符串中代表每页返回数据数量的参数名, 默认值: None
	page_size_query_param = 'page_size'
	# 查询字符串中代表页码的参数名, 有默认值: page
	# page_query_param = 'page'
	# 一页中最多的结果条数
	max_page_size = 2
    
class UserModelApi(ModelViewSet):
    # 使用自带方法 pagination_class 实例化上面定义的类
    pagination_class = StanPagginaton
限流设置
REST_FRAMEWORK = {   # 防爬虫
    'DEFAULT_THROTTLE_CLASSES':(
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.AnonRateThrottle',
    ),
    'DEFAULT_THROTTLE_RATES':{
        'anon':'100/day',   # 未认证用户每天100次
        'user':'1000/day'   # 认证用户每天能访问1000次
    }
}

posted @ 2020-10-28 16:38  让俺再睡会  阅读(66)  评论(0编辑  收藏  举报