#注意: 認證-->權限-->頻率 第一步認證沒通過的話就不會到權限,權限沒通過就不會到頻率
一、自定義認證類
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/209930.html
標籤:其他
