笔记: Django Rest Framework 权限类Permission自定义 使用流程概述

目的: 为不同的试图 用不同的权限访问

只要写上一个类,权限类,然后在views中引入就可以了,套路和上面的权的是一样的模式
如下所以:
写的权限类:
has_permission()返回True表示权限认证成功,返回False表示权限不通过,这个函数同时有三个参数,最后一个是view, 这个是在源码中规定的
注意里面的message

#下面是权限的代码, 没有继承restframework类中的任何一个类
class MyPermission(object):
    message = '这里可以定制返回的消息给前端显示。这个是类的做法,因为has_permission方法会有一个getattr(permission, "message", None),这里message就是自己定义的'
    def has_permission(self, request, view): #这个函数返回True或者False,True表示有权限,False表示没有权限,这个函数同时有三个参数,最后一个是view, 这个是在源码中规定的
        if request.user.user_type != 3:
            return False
        return True

写的试图:

class OrderView(APIView):

    #这里就是权限类的列表。
    permission_classes = [MyPermission,]

    #需求: 只有svip用户才有权限看
    def get(self, request, *args, **kwargs):




        ret = {'code':1000, 'msg':None, 'data':None} #用于标实是不是请求成功 和数据
        #标记用户登陆了才可以看到这里的数据,否则看不到数据
        #这里就用上面说的token,,因为只有登陆了,才会生成token,才标实用户已经登陆了,否则没有token,就表示用户没有登陆
        #这里的认证方法比较传统,没有用到restframework的认证类,如果有很多视图,则需要在每个视图中间都要写这个认证函数,
        #我们可以自定义一个验证类,然后重写authenticate()方法,把验证登陆的语句写在里面,然后在这里是需要调用就可以了.一劳永逸
        # token = request._request.GET.get('token')
        # if not token:
        #     return HttpResponse('用户未登录,无法查看')

        try:
            ret['data'] = ORDER_DICT

        except Exception as e:
            pass

        return JsonResponse(ret)

同理也可以写在配置文件中:

如下:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES':['api.utils.auth.FirstAuthenticate',],  #注意这个格式, 这里的DEFAULT_AUTHENTICATION_CLASSES是restframework 配置规定的, 后面的列表就是认证的类. 里面写的是认证类的路径
    #下面两句是匿名用户的设置:
    'UNAUTHENTICATED_USER':None, #匿名, 则request.user = None
    'UNAUTHENTICATED_TOKEN':None, #匿名, 则request.token = None
    'DEFAULT_PERMISSION_CLASSES':['api.utils.permission.MyPermission'] #权限类的全局设置
}

内置权限类 可以继承BasePermission

笔记: Django Rest Framework 权限类Permission自定义 使用流程概述_第1张图片
下面代码是继承BasePermission 之后的写法:

#下面是权限的代码, 没有继承restframework类中的任何一个类
class MyPermission(BasePermission):
    message = '这里可以定制返回的消息给前端显示。这个是类的做法,因为has_permission方法会有一个getattr(permission, "message", None),这里message就是自己定义的'
    def has_permission(self, request, view): #这个函数返回True或者False,True表示有权限,False表示没有权限,这个函数同时有三个参数,最后一个是view, 这个是在源码中规定的
        if request.user.user_type != 3:
            return False
        return True

你可能感兴趣的:(django)