DRF内置权限组件之自定义权限管理类
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内置权限组件之自定义权限管理类的更多相关文章
- DRF内置认证组件之自定义认证系统
自定义token认证 我们知道,在django项目中不管路由以及对应的视图类是如何写的,都会走到 dispatch 方法,进行路由分发, 在阅读 APIView类中的dispatch 方法的源码中,有 ...
- DRF内置过滤组件与排序组件结合使用
DRF内置过滤组件Filtering DRF提供了内置过滤组件Filtering,可以结合url路径的改变获取想要的数据,当然用户不可能在url访问路径中自己设置过滤条件,肯定是后端开发人员将前端页面 ...
- Win7下的内置FTP组件的设置详解
在局域网中共享文件,FTP是比较方便的方案之一.Win7内部集成了FTP,只是设置起来颇费一番功夫.着文以记之. 一.安装FTP组件 由于Win7默认没有安装FTP组件.故FTP的设置第一步就是安装F ...
- struts2内置拦截器和自定义拦截器详解(附源码)
一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截 ...
- spring hystrix和内置tomcat组件的参数调优解析
1. springboot内置tomcat容器的参数配置 server: port: 12021 # server端的socket超时间(毫秒),使用值-1表示没有(即无限)超时,默认值为60000( ...
- python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法
一.内置函数补充 1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstan ...
- python面向对象的多态-类相关内置函数-类内置魔法函数-迭代器协议-上下文管理-04
多态 一种事物具备不同的形态 例如:水 --> 固态.液态.气态 多态:# 多个不同对象可以相应同一个对象,产生不同的结果 首先强调,多态不是一种特殊的语法,而是一种状态,特性(多个不同对象可以 ...
- vue keep-alive内置缓存组件
1.当组件在keep-alive被切换时将会执行activeted和deactiveted两个生命周期 2.inlude 正则表达式或字符串 ,只有符合条件的组件会被缓存 exclude正则表达式或字 ...
- visual studio内置“iis”组件提取及二次开发
简介 visual studio安装后会自带小型的“iis”服务器,本文就简单提取一下这个组件,自己做一个小型“iis”服务器吧.先来说用途吧(废话可绕过),比如在服务器上没有安装iis,或者给客户演 ...
随机推荐
- split().reverse().join()代码解析
split() 方法用于把一个字符串分割成字符串数组. reverse() 方法用于颠倒数组中元素的顺序. join() 方法用于把数组中的所有元素放入一个字符串.
- win10里面怎么获取最高管理员权限
Windows10专业版 1,按下win+R键唤出“运行”窗口,输入gpedit.msc. 2,这时打开了组策略编辑器,在左边找到“计算机配置-Windows 设置”,再进入右边“安全设置”,如图. ...
- 题解 CF51F 【Caterpillar】
根据毛毛虫的定义,我们不难发现在双连通分量中的点我们都需要进行合并操作,所以我们先进行\(tarjan\)缩边双连通分量,使原图变成一棵树,缩点对答案产生的贡献为每个双连通分量的\(size-1\) ...
- 微软如何绑定二次验证码_虚拟MFA_两步验证_身份验证?
1.登陆Microsoft账户,找到二次验证绑定界面 进入Microsoft,点右上角用户头像进行登陆.之后点“安全性”. 之后点击[更多安全选项] 找到“身份验证应用”(注意不是“双重验证”).点击 ...
- APP自动化 -- 获取driver
一.appium设置 1.打开appium 2.设置 appium服务器:点击 高级设置 3.启动 appium 服务器 二.查看 .apk 安装包的“包名”和“活动入口名” 1.先复制本地 ...
- 21天学通C++(C++程序的组成部分)
C++程序被组织成类,而类由成员函数和成员变量组成. 本章学习: 1)C++程序的组成部分. 2)各部分如何协同工作. 3)函数及其用途. 4)基本输入输出操作. C++程序划分为两个部分,以#大头的 ...
- python3 httpConnection——post请求
#coding=utf-8 import http.clientimport urllib.parse #与服务器建立链接url = 'code.ali.cn:80' conn = http.clie ...
- 苹果挖矿恶意程序处理(OSX/CoinMiner.X)
背景 近期通过流量告警发现多起外连矿池的告警,均外连至43.249.204.231 威胁情报信息如下: 系统表象 1.通过ps -ef|grep osascript发现在/library/Launch ...
- Swift Alamofire
转载:https://www.jianshu.com/p/07b1ec36a689最近AFNetworking的作者Matt Thompson 提出了一个新的类似AFNetworking的网络基础库, ...
- 023_go语言中的通道
代码演示 package main import "fmt" func main() { messages := make(chan string) go func() { mes ...