权限组件
#查看AllowAny源码自定义一个权限组件
from rest_framework.permissions import AllowAny
#自定义一个权限组件
class SVIPPermission(object):
message="没有权限访问!"
def has_permission(self,request,view):
user_type=request.auth.user.type
if user_type==3:
return True
else:
return False
#在视图中使用
permission_classes = [SVIPPermission, ]
频率组件
例子:自定义一分钟内防问不得超过三次,超过三次,等待访问。
#查看BaseThrottle频率组件类,学着自定义一个。
from rest_framework.throttling import BaseThrottle
VISIT_RECORD={}
class VisitThrottle(object):
#必须定义些方法
def allow_request(self,request,view):
# 限定每分钟访问次数不能超过三次
print("META",request.META)
print("META",request.META.get("REMOTE_ADDR"))
remote_addr = request.META.get('REMOTE_ADDR')
import time
# 当前访问时间
ctime = time.time()
# 第一次方访问
if remote_addr not in VISIT_RECORD:
VISIT_RECORD[remote_addr] = [ctime, ]
return True
# 当前访问IP的访问历史记录
history = VISIT_RECORD.get(remote_addr)
self.history=history
# 当前访问IP的访问历史记录中的时间如果不在最近的一分钟内,pop掉
while history and history[-1] < ctime - 60:
history.pop()
# 访问历史记录不足三次,放行,否则,拦截
if len(history) < 3:
history.insert(0, ctime)
return True
else:
return False
#必须定义此方法,此方法告知等待时间。
def wait(self):
import time
ctime=time.time()
return 60-(ctime-self.history[-1])
#在视图中使用
throttle_classes = [VisitThrottle,]
URL分发
#导包:
from rest_framework import routers
#创建一个路由。
router=routers.DefaultRouter()
#在路由中注册视图的分发。
router.register("courses",views.CourseModelView)
#在urlpatterns添加些注册的分发。
url("^",include(router.urls))
响应器
renderer_classes = [JSONRenderer,BrowsableAPIRenderer]
分页器
from rest_framework.pagination import PageNumberPagination
class MyPageNumberPagination(PageNumberPagination):
#每页显示数据个数
page_size = 2
#设置最大页数
page_size_query_param="size"
max_page_size=4
#分页器的使用
pagination_class = MyPageNumberPagination