REST framework(六) 其它组件

权限组件

#查看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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值