权限permissions

权限验证必须要在认证之后验证

 

权限组件也不用多说,读了源码你就很清楚了,跟认证组件很类似

 

具体的源码就不展示,自己去读吧,都在这里:

前后端分离djangorestframework——权限组件

 

前后端分离djangorestframework——权限组件

 

 

局部权限

 

设置model表,其中的type就是用户类型

前后端分离djangorestframework——权限组件

 

数据库:

前后端分离djangorestframework——权限组件

 

在根目录创建utils,utils创建permission文件,在其中定义权限类,自定义的权限类必须继承BasePermission类,且必须定义has_permission方法,其中message是权限验证没通过时显示的字段

前后端分离djangorestframework——权限组件

 

url:

前后端分离djangorestframework——权限组件

前后端分离djangorestframework——权限组件

 

view:

前后端分离djangorestframework——权限组件

 

 开始访问,刚才说了权限是在用户登录认证之后做的处理,所以也必须带上token访问:

前后端分离djangorestframework——权限组件

好现在是无权访问,修改用户的type为1看看:

前后端分离djangorestframework——权限组件

 

重启项目再次访问:

前后端分离djangorestframework——权限组件

 

 

 

如果不带token访问:

前后端分离djangorestframework——权限组件

 

所以其实在定义的权限类那里可以先作判断是否用户已通过认证,这个可以自行研究

主要代码:

view:

from rest_framework.views import APIView
from rest_framework.views import Response
from utils.auth import MyAuth
from utils.permisson import MyPermission
from DRF.models import User
import uuid


class DemoView(APIView):
    def get(self, request):
        return Response('简单认证')


class LoginView(APIView):
    def get(self, request):
        return Response('请登录,如果没有账号请创建')

    def post(self, request):
        user = request.data.get('user')
        pwd = request.data.get('pwd')
        token = uuid.uuid4()
        User.objects.create(user=user, pwd=pwd, token=token)
        return Response('创建用户成功')


class TestView(APIView):
    authentication_classes = [MyAuth, ]
    permission_classes = [MyPermission, ]

    def get(self, request):
        return Response('权限等级测试,VIP用户您好,欢迎访问XX。。。')
View

相关文章: