zoukankan      html  css  js  c++  java
  • def分页器,频率限制

    分页器

    #views.py
    
    # 查所有,才需要分页
    from rest_framework.generics import ListAPIView
    # 内置三种分页方式
    from  rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
    '''
    PageNumberPagination
        page_size:每页显示的条数
    '''
    class MyPageNumberPagination(PageNumberPagination):
        #http://127.0.0.1:8000/api/books2/?aaa=1&size=6
        page_size=3  #每页条数
        page_query_param='aaa' #查询第几页的key
        page_size_query_param='size' # 每一页显示的条数
        max_page_size=5    # 每页最大显示条数
    
    
    # class MyLimitOffsetPagination(LimitOffsetPagination):
    #     default_limit = 3   # 每页条数
    #     limit_query_param = 'limit' # 往后拿几条
    #     offset_query_param = 'offset' # 标杆
    #     max_limit = 5   # 每页最大几条
    
    class MyCursorPagination(CursorPagination):
        cursor_query_param = 'cursor'  # 每一页查询的key
        page_size = 2   #每页显示的条数
        ordering = '-id'  #排序字段
    # class BookView(ListAPIView):
    #     # queryset = models.Book.objects.all().filter(is_delete=False)
    #     queryset = models.Book.objects.all()
    #     serializer_class = BookModelSerializer
    #     #配置分页
    #     pagination_class = MyCursorPagination
    
    # 如果使用APIView分页
    from utils.throttling import MyThrottle
    class BookView(APIView):
        # throttle_classes = [MyThrottle,]
        def get(self,request,*args,**kwargs):
            book_list=models.Book.objects.all()
            # 实例化得到一个分页器对象
            page_cursor=MyPageNumberPagination()
    
            book_list=page_cursor.paginate_queryset(book_list,request,view=self)
            next_url =page_cursor.get_next_link()
            pr_url=page_cursor.get_previous_link()
            # print(next_url)
            # print(pr_url)
            book_ser=BookModelSerializer(book_list,many=True)
            return Response(data=book_ser.data)
    
        
      
    
    #settings.py
    REST_FRAMEWORK={
        'PAGE_SIZE': 2,
    }
    

    2 根据ip进行频率限制

    # 写一个类,继承SimpleRateThrottle,只需要重写get_cache_key 
    from rest_framework.throttling import ScopedRateThrottle,SimpleRateThrottle
    
    #继承SimpleRateThrottle
    class MyThrottle(SimpleRateThrottle):
        scope='luffy'
        def get_cache_key(self, request, view):
            print(request.META.get('REMOTE_ADDR'))
            return request.META.get('REMOTE_ADDR')   # 返回
        
    # 局部使用,全局使用 
    REST_FRAMEWORK={
        'DEFAULT_THROTTLE_CLASSES': (
            'utils.throttling.MyThrottle',
        ),
        'DEFAULT_THROTTLE_RATES': {
            'luffy': '3/m'  # key要跟类中的scop对应
        },
    }
    
    # python3 manage.py runserver 0.0.0.0:8000   你们局域网就可以相互访问
    
    
    # 内网穿透
    
  • 相关阅读:
    Java基础--(一)hello world
    性能测试--jmeter安装与配置
    性能测试--(四)函数
    性能测试--(三)jmeter参数化
    (一)Monkey使用场景及常用命令
    (二)logcat/trace.txt日志文件的分析
    (一)adb部署及使用
    SOAP UI破解及安装
    性能测试常用指标
    shll 基础讲解
  • 原文地址:https://www.cnblogs.com/ch2020/p/15191912.html
Copyright © 2011-2022 走看看