restframework-总结

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',
                            }
                        }
            

 

posted @ 2018-02-06 19:48  一石数字欠我15w!!!  阅读(257)  评论(0编辑  收藏  举报