Django权限和认证模块的解读

from rest_framework.views import APIView

找到APIView中的dispatch方法

1562154350231

1562154457775

1562154688505


1562154947771

1562155005151

1562155121061

1562155353005


class MyAuth:
    def authenticate(self):
        pass


class Books(APIView):
    authentication_classes = [MyAuth]

    def get(self, request):
        pass

认证组件的使用


		-写一个认证类,继承BaseAuthentication
			class MyAuth(BaseAuthentication):
				def authenticate(self,request):
					#写一些认证的逻辑
					# print('我是认证类中的方法,只要配置了,一定会走我')
					token=request.GET.get('token')
					token_obj=models.Token.objects.filter(token=token).first()
					if token_obj:
						#有值表示登录了
						#token_obj.user 当前登录的user对象
						return token_obj.user,token_obj
					else:
						#没有值,表示没有登录,抛异常
						raise AuthenticationFailed('您没有登录')
		-局部使用
			-在视图类中写
				authentication_classes=[MyAuth,]
		-全局使用
			在settings.py中配置
			REST_FRAMEWORK={
				"DEFAULT_AUTHENTICATION_CLASSES":["app01.MyAuths.MyAuth",]
			}
		-局部禁用:
			authentication_classes = []

权限组件的使用

	-写一个权限类,继承BasePermission
			class MyPermision(BasePermission):
				message = '不是超级用户,查看不了'
				def has_permission(self,request,view):
					#因为权限在认证之后执行的,所有能取到reuqest.user
					if request.user.user_type==1:
						return True
					else:
						return False
			-局部使用
				-在视图类中写
					permission_classes=[MyPermision,]
			-全局使用
				在settings.py中配置
				REST_FRAMEWORK={
					"DEFAULT_PERMISSION_CLASSES":["app01.MyAuths.MyPermision",]
				}
			-局部禁用:
				permission_classes = []
			-读源码看到的东西:
				-返回值显示中文,写个message=“中文”
原文地址:https://www.cnblogs.com/ruhai/p/11134625.html