一米者、自定義認(rèn)證類
#定義一個(gè)類繼承BaseAuthentication,重寫了authenticate方法
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from app01 import models
class LoginAuth(BaseAuthentication):
def authenticate(self,request):
# token = request.GET.get('token') # 從瀏覽器中獲取
token = request.META['HTTP_TOKEN'] #從請求頭中獲取
print(token)
res = models.UserToken.objects.filter(token=token).first()
if res:
return (res.user,token) #self.user, self.auth = user_auth_tuple
else:
raise AuthenticationFailed('你沒有登陸')
#注意:1宇智、認(rèn)證類中塘雳,認(rèn)證通過會返回一個(gè)元組陆盘,有兩個(gè)值,第一個(gè)值會給request.user败明,第二個(gè)值會給request.auth
#2、認(rèn)證類可以配置多個(gè)太防,按照從前向后的順序執(zhí)行妻顶,如果前面有返回值,認(rèn)證就不再繼續(xù)了
二蜒车、認(rèn)證功能局部使用和全局使用
#1讳嘱、全局使用(所有接口,都需要登陸才能訪問)
-在配置文件中
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": ["app01.MyAuthen.LoginAuth", ]
}
#2酿愧、局部使用
-在想局部使用的視圖類上
authentication_classes = [MyAuthen.LoginAuth,]
#3沥潭、局部禁用
-在想禁用的視圖類上
authentication_classes = []
三、自定義權(quán)限功能
#1嬉挡、登錄成功以后钝鸽,超級用戶可以干某些事,普通用戶不能干---》超級用戶可以查看某些接口庞钢,普通用戶不能查看
#2拔恰、定義一個(gè)類繼承BasePermission,重寫has_permission
from rest_framework.permissions import BasePermission
class SuperPermission(BasePermission):
def has_permission(self, request, view):
if request.user.user_type == 2:
return True
else:
return False
四基括、權(quán)限功能局部使用和全局使用
#在想局部使用的視圖類上
permission_classes = [MyAuthen.SuperPermission]
#全局使用
REST_FRAMEWORK = {
"DEFAULT_PERMISSION_CLASSES": ["app01.MyAuthen.SuperPermission", ]
}
#局部禁用
permission_classes = []
五颜懊、內(nèi)置的權(quán)限和認(rèn)證類
# 內(nèi)置認(rèn)證類
from rest_framework.exceptions import AuthenticationFailed
# 內(nèi)置權(quán)限類
from rest_framework.permissions import BasePermission