1. 规范 - 版本控制 - 部署专用的域名(防止跨域攻击) - 因为restframework又称为面向资源的编程所以url名词需要用专业的名词去表示 - 请求方式method - url上可以传递搜索条件 - 有状态码 - 错误处理 - 返回结果:针对不同的操作,返回的数据不同 2. django rest framework 框架 - dispatch - 请求封装 - 处理版本 - 认证 - 权限 - 限制访问频率 - 认证 - 编写类 def auth...(): - 返回结果: - None - (user,auth) - raise APIException(...) - 应用 - 单独视图 - 全局 - 面向对象: - 封装 - 继承
1. 认证,检查用户是否存在;如果存在request.user/request.auth;不存在request.user/request.auth=None 2. 权限, request.user/request.auth True/False PS: has_object_permission 3. 访问频率 a. 对匿名用户进行限制:每个用户1分钟允许访问10次 b. 对匿名用户进行限制 每个用户1分钟允许访问5次,登录用户1分钟允许访问10次,VIP1分钟允许访问20次 4. 总结: 认证 - 类:authenticate/authenticate_header - 返回值:None,(user,auth),异常 - 配置: - 视图: class IndexView(APIView): authentication_classes = [MyAuthentication,] - 全局: REST_FRAMEWORK = { 'UNAUTHENTICATED_USER': None, 'UNAUTHENTICATED_TOKEN': None, "DEFAULT_AUTHENTICATION_CLASSES": [ # "app02.utils.MyAuthentication", ], } 权限 - 类:has_permission/has_object_permission - 返回值: True、False、exceptions.PermissionDenied(detail="错误信息") - 配置: - 视图: class IndexView(APIView): permission_classes = [MyPermission,] - 全局: REST_FRAMEWORK = { "DEFAULT_PERMISSION_CLASSES": [ # "app02.utils.MyAuthentication", ], } 限流 - 类:allow_request/wait PS: scope = "wdp_user" - 返回值:True、False - 配置: - 视图: class IndexView(APIView): throttle_classes=[AnonThrottle,UserThrottle,] def get(self,request,*args,**kwargs): self.dispatch return Response('访问首页') - 全局 REST_FRAMEWORK = { "DEFAULT_THROTTLE_CLASSES":[ ], 'DEFAULT_THROTTLE_RATES':{ 'wdp_anon':'5/minute', 'wdp_user':'10/minute', } }