def权限,频率,分页

本文详细介绍了如何在Django REST框架中实现自定义权限控制,包括创建权限类、局部及全局应用权限,以及如何限制IP地址访问频率。此外,还探讨了不同分页策略的实现方法。

  权限

    -写一个类:

      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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值