Django:RestFramework之-------权限
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之-------权限的更多相关文章
- django restframework
一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...
- django restframework 快速入门
django restframework 快速入门 基本流程 建立 Models 依靠 Serialiers 将数据库取出的数据 Parse 为 API 的数据(可用于返回给客户端,也可用于浏览器显示 ...
- Django Restframework 实践(一)
具备以下知识: django http://www.cnblogs.com/menkeyi/p/5882464.html http://www.cnblogs.com/menkeyi/p/588245 ...
- django restframework 的日常使用
本文讨论 django restframework 的日常使用,满足常用 api 编写的需求,比如 List, Detail, Update, Put, Patch 等等.探讨 django rest ...
- Django RestFramework (DRF)
准备: 下载 pip install djangorestframework 一 APIView源码解析 1 预备知识 CBV(class based view)FBV(function based ...
- django restframework serializer 增加自定义字段
在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现 ...
- Django中用户权限模块
Django中用户权限模块 1 auth模块 auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和admin模块配合使用, 快速建立网站的管理系 ...
- django restframework jwt
既然要来学习jwt(json web token),那么我们肯定是先要了解jwt的优势以及应用场景--跨域认证. $ pip install djangorestframework-jwt 传统coo ...
- Django内置权限扩展案例
当Django的内置权限无法满足需求的时候就自己扩展吧~ 背景介绍 overmind项目使用了Django内置的权限系统,Django内置权限系统基于model层做控制,新的model创建后会默认新建 ...
随机推荐
- JDK1.8 LocalDate 使用方式;LocalDate 封装Util,LocalDate工具类(三)
未完待续 ........ 前言: 大企鹅的日常分享,第三步,最近一直在想策略设计模式和工厂模式结合优化ifelse的写法,看了很多资料,终于写出了自己要写的东西,在这段时间里,也有求助小伙伴,但是, ...
- CMD窗口恢复默认设置
CMD全称Command,是Windows系统下自带的类DOS系统,在日常工作中,有时候设置会损害CMD窗口的默认,导致浏览效果不佳,这时候需要有办法恢复到默认设置.在注册表中删除以下文件夹即可:HK ...
- Pandas | 11 字符串函数
在本章中,我们将使用基本系列/索引来讨论字符串操作.在随后的章节中,将学习如何将这些字符串函数应用于数据帧(DataFrame). Pandas提供了一组字符串函数,可以方便地对字符串数据进行操作. ...
- GLIBC中的库函数fflush究竟做了什么?
目录 目录 1 1. 库函数fflush原型 1 2. FILE结构体 1 3. fflush函数实现 2 4. fclose函数实现 4 附1:强弱函数名 5 附2:属性__visibility__ ...
- 【数位DP】【P4127】[AHOI2009]同类分布
Description 给出两个数 \(a,~b\) 求出 \([a~,b]\) 中各位数字之和能整除原数的数的个数. Limitations \(1 \leq a,~b \leq 10^{18}\) ...
- node.js 路由详解
路由的基本使用 第一步:获取url跟目录下的字符 var http = require('http'); var url = require('url') http.createServer(func ...
- python总结五
1.is和==的区别:官方文档解释:is表示的是对象标识符,而==表示的是相等equal,is的作用是用来检查对象的标识符是否一致,也就是两个对象在内存中的地址是否一样 而==是用来检查两个对象是否相 ...
- 关于微信小程序前端Canvas组件教程
关于微信小程序前端Canvas组件教程 微信小程序Canvas接口函数 上述为微信小程序Canvas的内部接口,通过熟练使用Canvas,即可画出较为美观的前端页面.下面是使用微信小程序画图的一些 ...
- PHP处理SOAP
1.获取functions try { $client = new SoapClient("http://www.fangbei.org/services/inquiryTracingAnd ...
- win10系统:VMware无法在Windows运行该怎么办?
出现的问题: 解决方法: 点击“检查更新”或去官网下载最新版本 Vmware15.5.0(经过测试发现,Windows 10上面可以运行Vmware15.5.0 ) VMware Workstati ...