python-关于django中一些设置

======================认证&权限&限流&过滤&排序&分页===================
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

 

你可能感兴趣的:(python,django)