Django权限和认证模块的解读

时间:2019-07-04
本文章向大家介绍Django权限和认证模块的解读,主要包括Django权限和认证模块的解读使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
from rest_framework.views import APIView

找到APIView中的dispatch方法



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