def权限,频率,分页

  权限

    -写一个类:

      class MyPer(BasePermission):

        message = '您没有权限'

        def has_permission(self,request,view):

          # 取出当前登录用户

          user = request.user

          # 取出当前登录用户类型的中文

          tt = user.get_user_type_display()

          if user.user_type ==0:

            return True

          else:

            return False

    -局部使用

      permission_classes = [MyPer]

    -全局使用

      在setting中

      "DEFAULT_PERMISSION_CLASSES":['app01.auth.MyPer'],

  频率

    -限制每个ip地址一分钟访问10次

    -写一个类

    from rest_framework.throtting import SimpleRate Throttle

    class VisitThrottle(SimpleRateThrottle):

      scope ='xx' #一定要写它

      # 必须重写这个方法,返回什么,就以什么作为访问频率限制的东西

      def get_cache_key(self,request,view):

        #return self.get_ident(request)

        return request.META.get('REMOTE_ADDR')

      -在setting中配置:

        'DEFAULT_THROTTLE_RATES':{

          # 这个key跟scope对应,value值3/m 3/h 4/d

          'xx':'3/m'

        }

      -使用:

        -局部使用:

          throttle_classes = [VisitThrottle]

        -全局使用:

          "DEFAULT_THROTTLE_CLASSES":["app01.auth.VisitThrottle"],

  分页

    -简单分页

      -page_size = api_settings.PAGE_SIZE  :每页显示条数

      -page_query_param = 'page'   :查询的页码数

      -page_size_query_param = None  :每页最大显示条数

        -如果我要的是第一页显示10条:http://127.0.0.1:8000/books/?ccc=10&page=1

        -如果我要的是第二页显示5条:http://127.0.0.1:8000/books/?ccc=5&page=2

      max_page_size = 8  :控制最大显示多少条

      -如果我想第一页显示10000条,这种不合理,通过这个参数控制,最大显示8条

      -使用:

        page_simple = PageNumberPagination()

          page_simple.page_size = 4

          # page_simple.page_query_param = 'aaa'

          page_simple.page_size_query_param = 'ccc'

          page_simple.max_page_size = 8

          book_list = models.Book.objects.all()

          page_list = page_simple.paginate_queryset(book_list,request,self)

          book_ser = BookSerializer(instance = page_list,many=True)

    -偏移分页

      -default_limit = api_settings.PAGE_SIZE: 默认偏移的条数 5

      limit_query_param = 'limit'  :偏移的条数

      offset_query_param = 'offset'  :是标杆

      max_limit = None  :最大偏移的条数

    -游标分页:原理:速度最快,但是只能往前走和往后走

      -cursor_query_param = 'cursor'

      page_size = api_settings.PAGE_SIZE :默认每页显示的条数

      ordering = 'id'  :按谁排序

      

原文地址:https://www.cnblogs.com/xiaocaiyang/p/10453028.html