4.restframework-权限

4.1权限:

  • 权限在单个视图应用。
  1. class MyPermission(object):
  2. """认证类"""
  3. def has_permission(self,request,view):
  4. """重写has_permission方法"""
  5. #判断用户类型
  6. if request.user.user_type != 3:
  7. return False
  8. return True
  9. class OrderView(APIView):
  10. """订单业务 (只有SVIP能看到)"""
  11. #message当权限未通过,返回内容。
  12. message = "必须是SVIP才可以进行访问"
  13. authentication_classes = [Authtication,]#用于认证
  14. permission_classes = [MyPermission,]#用于权限控制
  15. def get(self,request,*args,**kwargs):
  16. ret = {"code": 1000, "msg": None, "data": None}
  17. try:
  18. ret['data'] = ORDER_DICT
  19. except Exception as e:
  20. pass
  21. return JsonResponse(ret)
  • 效果:

    • 当用于在url键入user_type=1的用户拒绝访问:http://127.0.0.1:8000/api/v1/order/?token=408a04dbce13814fd076807f865429b4

    • 当用户在url键入user_type=3的用户拿到数据库内容:http://127.0.0.1:8000/api/v1/order/?token=f2c781da6953632d0c5421e8cb17e740

4.2权限源码解析

  1. #-----------------------dispatch---------------------------
  2. #执行dispatch方法:
  3. def dispatch(self, request, *args, **kwargs):
  4. ...
  5. #封装request,获取一个加强版request
  6. request = self.initialize_request(request, *args, **kwargs)
  7. ...
  8. #执行初始化方法
  9. self.initial(request, *args, **kwargs)
  10. ...
  11. #-----------------------------------------------------------
  12. #-----------------------initial---------------------------
  13. def initial(self, request, *args, **kwargs):
  14. ...
  15. self.check_permissions(request)#进行权限检验。
  16. ...
  17. #-----------------------------------------------------------
  18. #-----------------------check_permissions-------------------
  19. def check_permissions(self, request):
  20. # 列表存储着 权限类的对象
  21. for permission in self.get_permissions():
  22. #如果是自定义权限类必须有has_permission方法。这样才能进行权限判断,权限认证时,当什么都没有返回表示正常执行,触发异常表示权限验证失败。 message就是触发异常后回的异常消息.
  23. if not permission.has_permission(request, self):
  24. self.permission_denied(
  25. request, message=getattr(permission, 'message', None)
  26. )
  27. #循环遍历self.get_permissions(),那么self.get_permissions()做什么事情呢?进入看一下
  28. #--------------------get_permissions------------------------
  29. def get_permissions(self):
  30. return [permission() for permission in self.permission_classes]
  31. #通过遍历permission_classes,返回一个列表。
  32. #而在我们没有在视图定义:permission_classes时候会默认找配置文件的permission_classes,如下:
  33. permission_classes = api_settings.DEFAULT_PERMISSION_CLASSES
  34. #-----------------------------------------------------------

4.3全局和局部配置权限:

  1. #全局配置settings.py配置
  2. "DEFAULT_PERMISSION_CLASSES":['app.utils.permission.MyPermission']
  3. #局部配置
  4. permission_classes = [MyPermission,]#用于权限控制,MyPermission自定义权限类

4.4django内置权限类

  1. from rest_framework.permissions import BasePermission
  2. class BasePermission(metaclass=BasePermissionMetaclass):
  3. """
  4. A base class from which all permission classes should inherit.
  5. """
  6. #定义has_permission方法
  7. def has_permission(self, request, view):
  8. """
  9. Return `True` if permission is granted, `False` otherwise.
  10. """
  11. return True
  12. def has_object_permission(self, request, view, obj):
  13. """
  14. Return `True` if permission is granted, `False` otherwise.
  15. """
  16. return True
  17. #允许任何访问
  18. class AllowAny(BasePermission):pass

4.5权限使用流程:(自定义权限类)

  • 为了规范:以后写权限类,要继承BasePermission.

  • 返回值:

    • True 有权访问
    • False 无权访问

Django:RestFramework之-------权限的更多相关文章

  1. django restframework

    一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...

  2. django restframework 快速入门

    django restframework 快速入门 基本流程 建立 Models 依靠 Serialiers 将数据库取出的数据 Parse 为 API 的数据(可用于返回给客户端,也可用于浏览器显示 ...

  3. Django Restframework 实践(一)

    具备以下知识: django http://www.cnblogs.com/menkeyi/p/5882464.html http://www.cnblogs.com/menkeyi/p/588245 ...

  4. django restframework 的日常使用

    本文讨论 django restframework 的日常使用,满足常用 api 编写的需求,比如 List, Detail, Update, Put, Patch 等等.探讨 django rest ...

  5. Django RestFramework (DRF)

    准备: 下载 pip install djangorestframework 一 APIView源码解析 1 预备知识 CBV(class based view)FBV(function based ...

  6. django restframework serializer 增加自定义字段

    在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现 ...

  7. Django中用户权限模块

    Django中用户权限模块 1 auth模块 auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和admin模块配合使用, 快速建立网站的管理系 ...

  8. django restframework jwt

    既然要来学习jwt(json web token),那么我们肯定是先要了解jwt的优势以及应用场景--跨域认证. $ pip install djangorestframework-jwt 传统coo ...

  9. Django内置权限扩展案例

    当Django的内置权限无法满足需求的时候就自己扩展吧~ 背景介绍 overmind项目使用了Django内置的权限系统,Django内置权限系统基于model层做控制,新的model创建后会默认新建 ...

随机推荐

  1. flask实战-个人博客-视图函数

    视图函数 在上面我们创建了所有必须的模型类.模板文件和表单类.经过程序规划和设计后,我们可以创建大部分视图函数.这些视图函数暂时没有实现具体功能,仅渲染对应的模板,或是重定向到其他视图.以blog蓝本 ...

  2. tf–idf算法解释及其python代码

    tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...

  3. Mybatis「MySQL-Oracle」 中主键自动生成 <selectKey> 序列化

    有时候我们不仅仅是通过返回 int 影响行数来确定数据是否插入成功就行了,因为我们总是会用到这个刚刚插入的自增主键,比如主子表入库,子表需要主表的 id,那这个时候我们再去数据库查就显得有点 low ...

  4. Windbg Register(寄存器)窗口的使用

    寄存器是位于在 CPU 的小易失性内存单位. 许多寄存器专用于特定用途,并可用于用户模式应用程序使用的其他寄存器. 基于 x86 和基于 x64 的处理器在有可用的寄存器的不同集合. 如何打开寄存器窗 ...

  5. proc介绍,free命令查看内存

    proc介绍 https://www.cnblogs.com/dongzhuangdian/p/11366910.html https://blog.csdn.net/majianting/artic ...

  6. table开发中遇到的问题

    table元素是一个很常用的元素.但是在开发中,我也遇到了一些值得记录下来的问题及解决方案: 1.td内容溢出时,隐藏内容并且以省略号提示 .hide-content{ /* 不换行 */ white ...

  7. 使用webpack.optimize.CommonsChunkPlugin提供公共代码

    在webpack4里使用webpack.optimize.CommonsChunkPlugin时,报错,webpack4删除了常用的 CommonsChunkPlugin ,提示我们用config.o ...

  8. 使用docker部署nginx+tomcat架构(2):访问mysql数据库

    上一篇完成了通过docker部署nginx+tomcat的基础软件架构,但是距离一个真正可用的软件架构还差得很远.其中最重要的一点是缺少数据库这个角色的存在,那么本篇就来完善这一点. 废话少说,直接进 ...

  9. DAVID 进行 GO/KEGG 功能富集分析

    何为功能富集分析? 功能富集分析是将基因或者蛋白列表分成多个部分,即将一堆基因进行分类,而这里的分类标准往往是按照基因的功能来限定的.换句话说,就是把一个基因列表中,具有相似功能的基因放到一起,并和生 ...

  10. 在 Debian 上的 SQL Server 的安裝指引

    我想在 linux 环境下尝试一下 Microsoft SQL Server,但是微软只发布了针对 Red Hat,SUSE,Ubuntu 和 Docker 引擎的.我平时习惯使用 Debian, U ...