drf——drf自定義認證類,自定義權限功能及使用

 

#注意: 認證-->權限-->頻率   第一步認證沒經過的話就不會到權限,權限沒經過就不會到頻率
1、自定義認證類
1 使用    -定義一個類,繼承BaseAuthentication    class LoginAuth(BaseAuthentication):        def authenticate(self, request):
            token = request.GET.get('token')
            res = models.UserToken.objects.filter(token=token).first()            if res:                return 元組            else:                raise AuthenticationFailed('您沒有登陸')    -重寫authenticate方法    -局部使用和全局使用        -局部:在視圖類中配置(只要配置了,就是登陸之後才能訪問,沒配置,不用登陸就能訪問)
            authentication_classes = [MyAuthen.LoginAuth, ]        -全局
        REST_FRAMEWORK = {        "DEFAULT_AUTHENTICATION_CLASSES": ["app01.MyAuthen.LoginAuth", ]
        }        
   -注意:    1 認證類,認證經過能夠返回一個元組,有兩個值,第一個值會給,request.user,第二個值會個request.auth    2 認證類能夠配置多個,按照從前向後的順序執行,若是前面有返回值,認證就再也不繼續往下走了    3 get請求攜帶token:-放在請求頭裏: url/?token=xxxxxxxxxx  -----放在頭裏要用Meta來取                -放在body體參數中: key:token value:xxxxxxxx
2、認證功能局部使用和全局使用
1 全局使用(全部接口,都須要登陸才能訪問)    -在配置文件中
        REST_FRAMEWORK = {        "DEFAULT_AUTHENTICATION_CLASSES": ["app01.MyAuthen.LoginAuth", ]
        }2 局部使用    -在想局部使用的視圖類上
    authentication_classes = [MyAuthen.LoginAuth,]3 局部禁用    -在想禁用的視圖類上
    authentication_classes = []
3、自定義權限功能
1 登陸成功之後,超級用戶能夠幹某些事,普通用戶不能幹---》超級用戶能夠查看某些接口,普通用戶不能查看2 使用   -寫一個類繼承BasePermission,重寫has_permission    class SuperPermission(BasePermission):        def has_permission(self, request, view):            # Return `True` if permission is granted, `False` otherwise.
            # 超級用戶能夠訪問,除了超級用戶之外,都不能訪問
            if request.user.user_type == '1':                return True            else:                return False            
3 局部使用和全局使用    -在想局部使用的視圖類上
    permission_classes = [MyAuthen.SuperPermission]    -全局使用
      REST_FRAMEWORK = {        "DEFAULT_PERMISSION_CLASSES": ["app01.MyAuthen.SuperPermission", ]
        }     -局部禁用
    permission_classes = []
4、權限功能局部使用和全局使用
1 使用方式    -在想局部使用的視圖類上
    permission_classes = [MyAuthen.SuperPermission]    -全局使用
      REST_FRAMEWORK = {        "DEFAULT_PERMISSION_CLASSES": ["app01.MyAuthen.SuperPermission", ]
        }     -局部禁用
    permission_classes = []
5、內置的權限和認證類
# 內置認證類from rest_framework.exceptions import AuthenticationFailed# 內置權限類from rest_framework.permissions import BasePermission
相關文章
相關標籤/搜索