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' :按谁排序