4.restframework-权限

4.1权限:

  • 权限在单个视图应用。
class MyPermission(object):
"""认证类"""
def has_permission(self,request,view):
"""重写has_permission方法"""
#判断用户类型
if request.user.user_type != 3:
return False
return True
class OrderView(APIView):
"""订单业务 (只有SVIP能看到)"""
#message当权限未通过,返回内容。
message = "必须是SVIP才可以进行访问"
authentication_classes = [Authtication,]#用于认证
permission_classes = [MyPermission,]#用于权限控制
def get(self,request,*args,**kwargs): ret = {"code": 1000, "msg": None, "data": None}
try:
ret['data'] = ORDER_DICT
except Exception as e:
pass
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权限源码解析

#-----------------------dispatch---------------------------

#执行dispatch方法:
def dispatch(self, request, *args, **kwargs):
...
#封装request,获取一个加强版request
request = self.initialize_request(request, *args, **kwargs)
...
#执行初始化方法
self.initial(request, *args, **kwargs)
...
#-----------------------------------------------------------
#-----------------------initial---------------------------
def initial(self, request, *args, **kwargs):
...
self.check_permissions(request)#进行权限检验。
...
#-----------------------------------------------------------
#-----------------------check_permissions-------------------
def check_permissions(self, request):
# 列表存储着 权限类的对象
for permission in self.get_permissions():
#如果是自定义权限类必须有has_permission方法。这样才能进行权限判断,权限认证时,当什么都没有返回表示正常执行,触发异常表示权限验证失败。 message就是触发异常后回的异常消息.
if not permission.has_permission(request, self):
self.permission_denied(
request, message=getattr(permission, 'message', None)
)
#循环遍历self.get_permissions(),那么self.get_permissions()做什么事情呢?进入看一下
#--------------------get_permissions------------------------
def get_permissions(self):
return [permission() for permission in self.permission_classes] #通过遍历permission_classes,返回一个列表。
#而在我们没有在视图定义:permission_classes时候会默认找配置文件的permission_classes,如下:
permission_classes = api_settings.DEFAULT_PERMISSION_CLASSES
#-----------------------------------------------------------

4.3全局和局部配置权限:

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

4.4django内置权限类

from rest_framework.permissions import BasePermission
class BasePermission(metaclass=BasePermissionMetaclass):
"""
A base class from which all permission classes should inherit.
"""
#定义has_permission方法
def has_permission(self, request, view):
"""
Return `True` if permission is granted, `False` otherwise.
"""
return True def has_object_permission(self, request, view, obj):
"""
Return `True` if permission is granted, `False` otherwise.
"""
return True
#允许任何访问
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. am instrument 命令详解运行多个用例

    1 Instrument是什么? instrument为am命令的一个子命令.用于启动一个Instrumentation测试.首先连接手机或者模拟器,通过adb shell命令,进入shell层进行操 ...

  2. lynis安装和扫描Linux的安全漏洞

    今天客户的服务器出了点问题需要排查具体的原因,在德国朋友的建议下用Lynis进行扫描,Lynis是Linux系统中的审计工具,能够对Linux系统的安全进行检测,在对系统进行扫描检测后,会生成安全报告 ...

  3. hadoop java.io.EOFException: Unexpected end of input stream

    执行hadoop 报错 java.io.EOFException: Unexpected end of input stream at org.apache.hadoop.io.compress.De ...

  4. [RN] 可播放视频的播放器版本

    可播放视频的播放器版本 "react": "16.6.3", "react-native": "0.57.8", &qu ...

  5. PyTorch学习之六个学习率调整策略

    PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现.PyTorch提供的学习率调整策略分为三大类,分别是 有序调整:等间隔调整(Step),按需调整学习率(Mul ...

  6. 【BigData】Java基础_方法的定义与使用

    1.概念 Java语言中的“方法”(Method)在其他语言当中也可能被称为“函数”(Function).对于一些复杂的代码逻辑,如果希望重复使用这些代码,并且做到“随时任意使用”,那么就可以将这些代 ...

  7. java基础 static

    参考文章: 静态导包:https://blog.csdn.net/u012338954/article/details/51010337 常量池:http://blog.sina.com.cn/s/b ...

  8. Gamma阶段项目展示

    Gamma阶段项目展示 一. 团队成员介绍 姓名 Gamma职责 个人博客 张圆宁 PM,后端 个人博客 王文珺 后端 个人博客 牛宇航 后端 个人博客 申化文 后端 个人博客 汪慕澜 测试,部署 个 ...

  9. 【视频开发】伽马校正(gamma correction)学习笔记

    我相信几乎所有做图像处理方面的人都听过伽马校正(Gamma Correction)这一个名词,但真正明白它是什么.为什么要有它.以及怎么用它的人其实不多.我也不例外.  最初我查过一些资料,但很多文章 ...

  10. windows上svn图标不显示 绿色对号

    http://blog.csdn.net/fengyupeng/article/details/12514449 症状1:项目左侧导航栏表不能正常显示图标 方法:windows->prefere ...