热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DjangoRestFramework【DRF授权】

详细方法参考Django官方授权API1.全局权限在setting中配置授权管理,这个授权是全局的,对于每一个视图都生效REST_FRAMEWORK{#全局配置优先级高于视图


详细方法参考Django官方授权API


1.全局权限

setting中配置授权管理,这个授权是全局的,对于每一个视图都生效

REST_FRAMEWORK = {
# 全局配置 优先级高于视图类中的配置
# 默认权限配置:每一个http方法都可以有对应的权限配置
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
]
# 修改权限管理 必须授权才可以使用
# 'DEFAULT_PERMISSION_CLASSES': [
# 'rest_framework.permissions.IsAuthenticated',
# ]
}

2. 视图级别权限

2.1 给所有功能授权同样权限

shop.viess.py代码

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated, IsAdminUser
from shop.models import Category, Goods
from shop.serializers import CategorySerializer, GoodsSerializer
class CategoryViewSets(viewsets.ModelViewSet):
"""
分类视图:
继承ModelViewSet之后拥有GET POST PUT PATCH DELETE等HTTP动词操作
serilizer_class 指明序列化类
"""

queryset = Category.objects.all()
serializer_class = CategorySerializer
# 用户未登入不显示 分类列表 优先级高于全局配置,第一参数是管理员可以查看,第二个参数是授权可以查看
permission_classes = [IsAdminUser,IsAuthenticated]

没有授权的时候的显示:
在这里插入图片描述
在Apifox或者postman中使用管理员账户登入测试
选择BasicAuth,使用管理员账户登入之后就可以查询到结果
在这里插入图片描述


2.2.根据不同身份对同一个视图设置不同的权限

需求:超级管理员可以创建分类 普通用户可以查看分类
shop.view.py代码:

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated, IsAdminUser
from shop.models import Category, Goods
from shop.serializers import CategorySerializer, GoodsSerializer
class CategoryViewSets(viewsets.ModelViewSet):
"""
分类视图:
继承ModelViewSet之后拥有GET POST PUT PATCH DELETE等HTTP动词操作
serilizer_class 指明序列化类
"""

queryset = Category.objects.all()
serializer_class = CategorySerializer
# 用户未登入不显示 分类列表 优先级高于全局配置
# permission_classes = [IsAdminUser,IsAuthenticated]
# 需求:超级管理员可以创建分类 普通用户可以查看分类
def get_permissions(self):
if self.action == "create" or self.action == "update" or self.action == "partial_update" or self.action == "destroy":
return [IsAdminUser()]
else:
return []

效果演示,使用普通用户登入,然后添加商品分类:
就会报错没有权限进行添加操作
在这里插入图片描述


2.3.自定义权限

在子app下面创建一个权限类shop.permission.py

"""
自定义权限
"""

from rest_framework import permissions
class CategorysPermission(permissions.BasePermission):
def has_permission(self, request, view):
# 重写has_permission方法
# 如果返回Ture所有权限都有,如果返回False所有权限都没有
return False

views.py中引用这个自定义视图类

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated, IsAdminUser
from shop import permissions
from shop.models import Category, Goods
from shop.serializers import CategorySerializer, GoodsSerializer
class CategoryViewSets(viewsets.ModelViewSet):
"""
分类视图:
继承ModelViewSet之后拥有GET POST PUT PATCH DELETE等HTTP动词操作
serilizer_class 指明序列化类
"""

queryset = Category.objects.all()
serializer_class = CategorySerializer
# 用户未登入不显示 分类列表 优先级高于全局配置
# permission_classes = [IsAdminUser,IsAuthenticated]
# 需求:超级管理员可以创建分类 普通用户可以查看分类
def get_permissions(self):
if self.action == "create" or self.action == "update" or self.action == "partial_update" or self.action == "destroy":
return [permissions.has_permission()]
else:
return []

3.模型级别权限






推荐阅读
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
author-avatar
大大炮
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有