DRF内置权限组件permissions

权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。

  • 在执行视图的dispatch()方法前,会先进行视图访问权限的判断
  • 在通过get_object()获取具体对象时,会进行模型对象访问权限的判断

在settings.py中设置DRF内置的权限组件的配置信息:

DRF提供了四种权限划分

REST_FRAMEWORK = {
...
'DEFAULT_PERMISSION_CLASSES': ( # 一、默认用户对所有的业务都有操作权限,即没有权限限制(未指明时默认的权限)
'rest_framework.permissions.AllowAny', # 二、仅通过认证的用户才可以访问项目中的接口
'rest_framework.permissions.IsAuthenticated', # 三、仅管理员用户(可以通过admin创建一个用户进行测试)
'rest_framework.permissions.IsAdminUser', # 四、未认证的用户只有查权限,经过认证的用户才有增删改的权限
'rest_framework.permissions.IsAuthenticatedOrReadOnly', ), }

以上这种全局配置方式,表示用户在访问项目中的所有接口时都有权限限制。

当然,我们可以进行局部配置,在指定的类视图中通过 permission_classes 属性配置权限管理类

permission_classes = [IsAuthenticated, ]

from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated class ExampleView(APIView): permission_classes = [IsAuthenticated,]

自定义权限管理类

如需自定义权限,需继承 rest_framework.permissions.BasePermission 父类,并实现以下两个任何一个方法或全部

  • .has_permission(self, request, view)

    是否可以访问视图, view表示当前视图对象

  • .has_object_permission(self, request, view, obj)

    是否可以访问数据对象, view表示当前视图, obj为数据对象

例如:

在当前子应用下的utils文件夹中,创建一个权限文件permissions.py中声明自定义权限类:

from rest_framework.permissions import BasePermission

class IsXiaoMingPermission(BasePermission):

    def has_permission(self, request, view):

        print(request)  # 局部配置下的打印结果:<rest_framework.request.Request object at 0x112041c50>

        print(view)     # 局部配置下的打印结果:<four.views.StudentViewSet object at 0x111f8a110>

        if( request.user.username == "xiaoming" ):

            return True

全局配置

用户在访问项目中的所有接口时都有 IsXiaoMingPermission 此权限管理限制。

REST_FRAMEWORK = {
...
'DEFAULT_PERMISSION_CLASSES': (
'four.utils.permissions.IsXiaoMingPermission',
)
...
}

局部配置

from four.utils.permissions import IsXiaoMingPermission

class StudentViewSet(ModelViewSet):
queryset = Student.objects.all()
serializer_class = StudentSerializer permission_classes = [IsXiaoMingPermission,]

DRF内置权限组件之自定义权限管理类的更多相关文章

  1. DRF内置认证组件之自定义认证系统

    自定义token认证 我们知道,在django项目中不管路由以及对应的视图类是如何写的,都会走到 dispatch 方法,进行路由分发, 在阅读 APIView类中的dispatch 方法的源码中,有 ...

  2. DRF内置过滤组件与排序组件结合使用

    DRF内置过滤组件Filtering DRF提供了内置过滤组件Filtering,可以结合url路径的改变获取想要的数据,当然用户不可能在url访问路径中自己设置过滤条件,肯定是后端开发人员将前端页面 ...

  3. Win7下的内置FTP组件的设置详解

    在局域网中共享文件,FTP是比较方便的方案之一.Win7内部集成了FTP,只是设置起来颇费一番功夫.着文以记之. 一.安装FTP组件 由于Win7默认没有安装FTP组件.故FTP的设置第一步就是安装F ...

  4. struts2内置拦截器和自定义拦截器详解(附源码)

    一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截 ...

  5. spring hystrix和内置tomcat组件的参数调优解析

    1. springboot内置tomcat容器的参数配置 server: port: 12021 # server端的socket超时间(毫秒),使用值-1表示没有(即无限)超时,默认值为60000( ...

  6. python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法

    一.内置函数补充 1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstan ...

  7. python面向对象的多态-类相关内置函数-类内置魔法函数-迭代器协议-上下文管理-04

    多态 一种事物具备不同的形态 例如:水 --> 固态.液态.气态 多态:# 多个不同对象可以相应同一个对象,产生不同的结果 首先强调,多态不是一种特殊的语法,而是一种状态,特性(多个不同对象可以 ...

  8. vue keep-alive内置缓存组件

    1.当组件在keep-alive被切换时将会执行activeted和deactiveted两个生命周期 2.inlude 正则表达式或字符串 ,只有符合条件的组件会被缓存 exclude正则表达式或字 ...

  9. visual studio内置“iis”组件提取及二次开发

    简介 visual studio安装后会自带小型的“iis”服务器,本文就简单提取一下这个组件,自己做一个小型“iis”服务器吧.先来说用途吧(废话可绕过),比如在服务器上没有安装iis,或者给客户演 ...

随机推荐

  1. 为Dark模拟做出的一些微小的贡献

    这几周经过liners大佬的指导,发现自己的代码实现能力确实太过于垃圾,所以根据他的指示,我应该去多多练习一下Dark模拟,但是最近刚刚入手Dark模拟的我感到非常的吃力,所以本人今天写博客一篇来讲述 ...

  2. canvas学习01

    canvas 必须指定宽高,确定可绘图区域的大小 canvas标签里写的是浏览器不支持canvas时展示的内容 <canvas id="drawing" width=&quo ...

  3. 题解 CF785E 【Anton and Permutation】

    考虑用分块解决这个题,一次交换对当前逆序对个数的影响是,加上两倍的在区间\([l+1,r-1]\)中比\(a_r\)小的元素个数,减去两倍的在区间\([l+1,r-1]\)中比\(a_l\)小的元素个 ...

  4. 打开chm文件时出现“无法显示此页:确保 Web 地址 //ieframe.dll/dnserrordiagoff.htm# 正确”的解决办法

    当我们打开chm文件时遇到下面这种情况: 解决方法: 1.一般情况下无法显示网页:右键 chm文件属性里最下面有个"解除锁定",点击"解除锁定"按钮就可以了. ...

  5. 《Python Web开发实战》|百度网盘免费下载|Python Web开发

    <Python Web开发实战>|百度网盘免费下载|Python Web开发 提取码:rnz4 内容简介 这本书涵盖了Web开发的方方面面,可以分为如下部分: 1. 使用最新的Flask ...

  6. dp最长不下降序列

    // // Created by snnnow on 2020/4/13. // //这是dp 问题的基础题 // //最长不下降 //(导弹拦截是其例题) //那这篇文章是讲啥呢, // 主要是吧, ...

  7. 线程_使用multiprocessing启动一个子进程及创建Process 的子类

    from multiprocessing import Process import os # 子进程执行的函数 def run_proc(name): print("子进程运行中,名称:% ...

  8. PHP jddayofweek() 函数

    ------------恢复内容开始------------ 实例 返回 1998 年 1 月 13 日这天是周几: <?php$jd=gregoriantojd(1,13,1998);echo ...

  9. PHP move_uploaded_file() 函数

    定义和用法 move_uploaded_file() 函数把上传的文件移动到新位置. 如果成功该函数返回 TRUE,如果失败则返回 FALSE. 语法 move_uploaded_file(file, ...

  10. Python学习手册第4版 中文PDF版|网盘下载内附地址

    本书是学习Python编程语言的入门书籍.Python是一种很流行的开源编程语言,可以在各种领域中用于编写独立的程序和脚本.Python免费.可移植.功能强大,而且使用起来相当容易.来自软件产业各个角 ...