======================认证&权限&限流&过滤&排序&分页===================
rest_framework中setting有全局设置修改的化:
在视图的setting中对应设置:
REST_FRAMEWORK = {
# 认证
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
),
# 权限
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny', #任何人
# 'rest_framework.permissions.IsAuthenticated', # 用户
),
# # 限流 对匿名和用户分别限流
# 'DEFAULT_THROTTLE_CLASSES': (
# 'rest_framework.throttling.AnonRateThrottle',
# 'rest_framework.throttling.UserRateThrottle'
# ),
# 'DEFAULT_THROTTLE_RATES': {
# 'anon': '3/minute',
# 'user': '5/minute'
# },
# 限流 对匿名和用户都统一限流
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.ScopedRateThrottle',
),
'DEFAULT_THROTTLE_RATES': {
'contacts': '3/minute',
'uploads': '5/minute'
},
# 分页
'DEFAULT_FILTER_BACKENDS': (
'django_filters.rest_framework.DjangoFilterBackend',
),
'DEFAULT_PAGINATION_CLASS':
'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 3, # 每页数目
# 版本配置
'DEFAULT_VERSIONING_CLASS':
# 'rest_framework.versioning.QueryParameterVersioning',
'rest_framework.versioning.URLPathVersioning',
# 自定义异常处理 指定DRF框架采用异常处理方法
'EXCEPTION_HANDLER':
'booktest.utils.exception_handler.exception_handler'
}
对应的view中视图函数:
# 自定义权限
class MyPermission(BasePermission):
def has_permission(self, request, view): # 是否可以访问视图
return True
def has_object_permission(self, request, view, obj): # 是否可以访问数据对象
if obj.id in (2,3):
return True
return False
# 自定义分页
class MyPageNumberPagination(PageNumberPagination):
# 页容量
page_size = 3
# 获取某页数据的参数名称
page_query_param = 'page'
page_size_query_param = 'page_size'
max_page_size = 5
# 主函数
# 获取一个图书列表
# 获取一个图书的详细
class BookInfoViewSet(ReadOnlyModelViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
filter_fields = ('btitle','bread')
# 只对session认证
authentication_classes = [SessionAuthentication]
# 认证用户有权限
# permission_classes = [IsAuthenticated]
# 自定义的权限
permission_classes = [MyPermission]
# 不限流
# throttle_classes = []
# 匿名用户限流
# throttle_classes = [AnonRateThrottle]
# 统一限流时,使用限流方式
# throttle_scope = 'uploads'
# 排序
filter_backends = (OrderingFilter,)
# 指定排序字段
ordering_filter = ['id','btitle','bread']
# 分页
#
# pagination_class = None
pagination_class = MyPageNumberPagination