#注意: 认证-->权限-->频率 第一步认证没经过的话就不会到权限,权限没经过就不会到频率
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