#注意: 認證-->權限-->頻率 第一步認證沒經過的話就不會到權限,權限沒經過就不會到頻率
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
1 全局使用(全部接口,都須要登陸才能訪問) -在配置文件中 REST_FRAMEWORK = { "DEFAULT_AUTHENTICATION_CLASSES": ["app01.MyAuthen.LoginAuth", ] } 2 局部使用 -在想局部使用的視圖類上 authentication_classes = [MyAuthen.LoginAuth,] 3 局部禁用 -在想禁用的視圖類上 authentication_classes = []
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 = []
1 使用方式 -在想局部使用的視圖類上 permission_classes = [MyAuthen.SuperPermission] -全局使用 REST_FRAMEWORK = { "DEFAULT_PERMISSION_CLASSES": ["app01.MyAuthen.SuperPermission", ] } -局部禁用 permission_classes = []
# 內置認證類 from rest_framework.exceptions import AuthenticationFailed # 內置權限類 from rest_framework.permissions import BasePermission