restframework权限,认证,限流配置

2023-05-16

认证Authentication

DRF框架的默认全局认证方案如下:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',  # session认证
        'rest_framework.authentication.BasicAuthentication',   # 基本认证
    )
}

也可以在每个视图中通过设置authentication_classess属性来设置视图的认证方案:

from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.views import APIView

class ExampleView(APIView):
    authentication_classes = (SessionAuthentication, BasicAuthentication)
    ...

配合权限,如果认证失败会有两种可能的返回值:

  • 401 Unauthorized 未认证
  • 403 Permission Denied 权限被禁止

权限Permissions

权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。

  • 在执行视图的dispatch()方法前,会先进行视图访问权限的判断
  • 在通过get_object()获取具体对象时,会进行对象访问权限的判断

提供的权限

DRF框架提供了四个权限控制类:

  • AllowAny 允许所有用户
  • IsAuthenticated 仅通过认证的用户
  • IsAdminUser 仅管理员用户
  • IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取

使用

DRF框架的默认权限控制如下:

'DEFAULT_PERMISSION_CLASSES': (
   'rest_framework.permissions.AllowAny', # 允许所有人
)

可以在配置文件中设置权限管理类,如:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated', # 允许认证用户
    )
}

也可以在具体的视图中通过permission_classes属性来指定某个视图所使用的权限控制类,如:

from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView

class ExampleView(APIView):
    permission_classes = [IsAuthenticated]
    ...

举例

from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import ReadOnlyModelViewSet

class BookInfoViewSet(ReadOnlyModelViewSet):
    # 指定当前视图所使用的查询集
    queryset = BookInfo.objects.all()
    # 指定当前视图所使用的序列化器类
    serializer_class = BookInfoSerializer
    # 指定当前视图所使用的认证类
    authentication_classes = [SessionAuthentication]
    # 指定当前视图所使用的权限控制类
    permission_classes = [IsAuthenticated]

自定义权限

如需自定义权限,需继承rest_framework.permissions.BasePermission父类,并实现以下两个任何一个方法或全部

  • .has_permission(self, request, view)

    是否可以访问视图, view表示当前视图对象

  • .has_object_permission(self, request, view, obj)

    是否可以访问数据对象, view表示当前视图, obj为数据对象

例如:

class MyPermission(BasePermission):
    def has_permission(self, request, view):
        """判断对使用此权限类的视图是否有访问权限"""
        # 任何用户对使用此权限类的视图都没有访问权限
        return True

    def has_object_permission(self, request, view, obj):
        """判断对使用此权限类视图某个数据对象是否有访问权限"""
        # 需求: 对id为1,3的数据对象有访问权限
        if obj.id in (1, 3):
            return True
        return False

class BookInfoViewSet(ReadOnlyModelViewSet):
    # 指定当前视图所使用的查询集
    queryset = BookInfo.objects.all()
    # 指定当前视图所使用的序列化器类
    serializer_class = BookInfoSerializer
    # 指定当前视图所使用的认证类
    authentication_classes = [SessionAuthentication]
    # 使用自定义的权限控制类
    permission_classes = [MyPermission]

限流Throttling

可以对接口访问的频次进行限制,以减轻服务器压力。

使用

DRF框架默认没有进行全局限流设置,可以在配置文件中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES进行全局配置。

可选限流类

1) AnonRateThrottle

限制所有匿名未认证用户,使用IP区分用户。

使用DEFAULT_THROTTLE_RATES['anon'] 来设置频次

2)UserRateThrottle

限制认证用户,使用User id 来区分。

使用DEFAULT_THROTTLE_RATES['user'] 来设置频次

3)ScopedRateThrottle

限制用户对于每个视图的访问频次,使用ip或user id。

限流设置

1)针对匿名用户和认证用户分别进行限流控制

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': (
        # 针对未登录(匿名)用户的限流控制类
        'rest_framework.throttling.AnonRateThrottle',
        # 针对登录(认证)用户的限流控制类
        'rest_framework.throttling.UserRateThrottle'
    ),
    # 指定限流频次
    'DEFAULT_THROTTLE_RATES': {
        # 认证用户的限流频次
        'user': '5/minute',
        # 匿名用户的限流频次
        'anon': '3/minute',
    },
}

DEFAULT_THROTTLE_RATES 可以使用 secondminutehour 或day来指明周期。

也可以在具体视图中通过throttle_classess属性来配置,如

from rest_framework.throttling import UserRateThrottle
from rest_framework.views import APIView

class ExampleView(APIView):
    throttle_classes = [UserRateThrottle]
    ...

2)针对匿名用户和认证用户进行统一的限流控制

REST_FRAMEWORK = {
    # 针对匿名用户和认证用户进行统一的限流控制
    'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.ScopedRateThrottle',
    ),

    # 指定限流频次选择项
    'DEFAULT_THROTTLE_RATES': {
        'upload': '3/minute',
        'contacts': '5/minute'
    },
}

例如:

class ContactListView(APIView):
    throttle_scope = 'contacts'
    ...

class ContactDetailView(APIView):
    throttle_scope = 'contacts'
    ...

class UploadView(APIView):
    throttle_scope = 'uploads'
    ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

restframework权限,认证,限流配置 的相关文章

  • vue3 ts vite 配置别名 导致报 无法找到对应莫模块的错误处理方式

    第一步 vite config ts alias span class token operator span span class token punctuation span span class token string 34 64
  • kl-waterfall 瀑布流

    文章目录 使用实现waterfall index文件kl waterfall item 使用 span class token operator lt span kl span class token operator span water
  • kl-anchor(vue锚点组件)

    文章目录 示例功能描述存在问题 使用实现 示例 功能描述 点击左侧导航栏 xff0c 右侧能滚动到指定的位置右侧滚动 xff0c 左侧能自动选中 存在问题 多次监听直接绑定滚动到了body 优化版本链接 使用 这儿是结合element ui
  • 银行家算法原理

    银行家算法原理
  • python 深度学习[数学基础-1-函数,极限]

    文章目录 函数 函数
  • python 深度学习-数学基础-2-导数

    z z的变化值比上距离的极限
  • python 深度学习-数学基础-3-微积分

  • rt-thread CAN通信(can dev write data failed!)解决,硬件定时器、以及CANfestival包的使用

    本文采用正点原子STM32f407ZGT6探索者 关于rtt的CAN通信配置可以参考RT Thread studio 添加CAN通信功能 按上面配置完成后串口会打印下图所示问题 xff1a xff08 can dev write data
  • (二)STM32串口总结(库函数版)

    一 STM32F103有两个串口 图中 TXD RXD 是相对 CH340G 来说的 xff0c 也就是 USB 串口的发送和接收引脚 而 USART1 RX 和 USART1 TX 则是相对于 STM32F103ZET6 来说的 也就是说
  • Matlab画图 线条的颜色、宽度等相关设置

    线条的属性有 xff1a Color 颜色 LineWidth 线条宽度 LineStyle 线型 LineJoin 线条边角的样式 AlignVertexCenters 锐化垂直线和水平线 线条属性的默认值为 0 0 0 39 39 39
  • 一、图像预处理

    四种图像的基本数据结构 xff1a Image 指Halcon的图像类型 Region 指图像中的一块区域 XLD 指图像中某一块区域的轮廓 Tuple 类似于数组 xff0c 用于存储一幅或多幅图像 内核矩阵的选择 xff1a 核越大越模
  • halcon边缘检测

    边缘检测 Ronny丶 博客园 寻找边缘的传统方法 xff0c 即图像中的暗 光转换 xff0c 是应用边缘滤波器 这些滤光器可以在光和暗区域的边界找到像素 从数学术语中来说 xff0c 这意味着这些滤波器决定了图像的梯度 此图像渐变通常作
  • ZED双目摄像头

    ZED stereol abs 配置踩过的坑 现在种树也不晚 博客园 介绍 xff1a CUDA CUDA 是 ZED SDK 使用的 NVIDIA 库 xff0c 用于在显卡上运行快速 AI 和计算机视觉任务 在 ZED SDK 安装过程
  • linux---五种高级IO模型

    阻塞IO模型非阻塞IO模型信号驱动IO模型异步IO模型多路转接IO模型高级IO重要概念 阻塞IO模型 在内核将数据准备好 xff0c 系统调用会一直等待 xff0c 所有的套接字默认都是阻塞IO方式 阻塞IO是最常见的IO模型 非阻塞IO模
  • Ubuntu错误处理集

    1 W GPG 错误 xff1a https developer download nvidia com compute cuda repos ubuntu1604 x86 64 Release 由于没有公钥 xff0c 无法验证下列签名
  • Linux下配置虚拟CAN

    1 加载vcan模块 sudo modprobe vcan 2 添加vcan0网卡 sudo ip link add dev vcan0 type vcan 3 查看当前CAN网络 ifconfig a 4 开启vcan0 sudo ip
  • ROS基础

    一 ROS的核心概念 节点 xff1a 节点管理器 xff1a 话题 xff1a 消息 xff1a 服务 xff1a 参数 xff1a 二 命令行工具的使用 命令行工具都是以ros开头的 常用命令 rostopicrosserviceros
  • Linux下编译Opencv和contrib

    1 安装准备 1 1 安装依赖项 sudo apt get install cmake sudo apt get install build essential libgtk2 0 dev libavcodec dev libavforma

随机推荐

  • YOLOv5和YOLOv7环境(GPU)搭建测试成功

    本来是用doc写的 xff0c 直接复制到这里很多图片加载缓慢 xff0c 我直接把doc上传到资源里面了 xff0c 0积分下载 xff1a 10条消息 YOLOv5和YOLOv7开发环境搭建和demo运行 Python文档类资源 CSD
  • 单片机通信总述——理论部分(CAN、串口、SPI、I2C等)

    一 基础概念 1 1 通信方法 并行通信 xff1a 传输原理 xff1a 数据各个位同时传输 xff1b 优点 xff1a 速度快 xff1b 缺点 xff1a 占用引脚资源多 是指使用 8 16 32 及 64 根或更多的数据线 有多少
  • Ubuntu系统搭建

    一 创建环境常见问题 1 1 windows11下打开虚拟机蓝屏问题 参考这篇文章 xff0c 控制面板 xff0c 启用和关闭windows功能 xff08 对话框 xff09 113条消息 VMware安装Ubuntu开启蓝屏解决方案
  • J-Link工具查看单片机内存等信息

    1 打开下图应用 2 输入 connect xff08 连接开发板 xff09 AC78013FDLA xff08 你的单片机型号 xff09 SWD xff08 仿真器接口 xff09 1000HZ xff08 接口速度 xff09 连接
  • Qt调用ffmpeg动态库和静态库及编译ffmpeg的方法

    一 编译 二 引入ffmpeg库文件 1 Qt工程下创建lib文件夹 xff0c lib文件夹下再创建ffmepg文件夹 2 将编译好的ffmpeg里面的include 和lib文件夹粘贴到如下文件夹下 xff08 3 xff09 在 pr
  • autoware花屏重影问题

    autoware 安装 花屏 重影问题 最近尝试下autoware来做建图 xff0c 无奈各类安装太过麻烦 xff0c 这里给几个小问题做下纪律 1 xff0c 安装过程 xff0c 走的官网那个 xff0c 事实证明官网教程最全面 xf
  • linux---select,poll,epoll的原理以及优缺点

    多路转接IO xff08 也叫IO多路复用 xff09 是一种处理高并发的IO事件监控 xff0c 同时对大量的描述符进行时间监控 xff0c 监控是否具备IO条件 就绪 xff1a 包括了读就绪事件 xff08 就是有数据到来的时候 xf
  • DTAM实现

    DTAM实现 这里是实现github上DTAM的一次记录 xff0c 主要是有些步骤的记录 需要下载的源码 xff08 可以多试试几个 xff0c 按照实现可能性排序 xff09 xff1a https github com Teddybe
  • jetson镜像克隆到固态再扩容简单方法

    jetson克隆方法很多 xff0c 我是自己把之前的sd镜像克隆做成img镜像了 然后烧写后之前是64g的后续烧写都是64g的不能把新的储存设备占满 这里有一个扩容和移植到固态的方法 主要分三步 xff1a 镜像克隆和烧录到sd卡使用固态
  • Orb_slam3 ROS ,D435i使用,ubuntu编译小记

    C 43 43 版本编译 先官网下载代码 xff0c 并下载安装官网所述安装包 git clone https github com UZ SLAMLab ORB SLAM3 git ORB SLAM3 下载完编译c 43 43 版本 cd
  • d455双目相机联合IMU标定

    感谢这两位博主的优秀文章 xff1a RealSense D455的标定并运行VINS FUSION Z Jin16的博客 CSDN博客 d455 标定 Realsense D435I标定 小岛 神酱的博客 CSDN博客 d435i参数 主
  • gitee发布示例

    简易的命令行入门教程 Git 全局设置 git config global user name 34 bnb 34 git config global user email 34 2207201665 64 qq com 34 创建 git
  • linux终端快捷指令创建

    使用这个打开gedit bashrc xff0c 把下面的按照下面的格式书写 xff1a alias lt 想要的快捷键 gt 61 操作指令 示例 xff1a alias sd 61 39 source devel setup sh 39
  • 使用vscode做得基础配置自动保存格式化

    vscode默认启用了根据文件类型自动设置tabsize的选项 34 editor detectIndentation 34 false 重新设定tabsize 34 editor tabSize 34 2 每次保存的时候自动格式化 34
  • OOQP 使用教程 c++

    最近学习了一下OOQP的使用在这里记录一下 在matlab代码中是quadprog xff0c 而这次使用OOQP也主要是为了计算二次规划问题 安装OOQP 首先是安装问题 xff0c 不得不说 xff0c 当时安装也花了不少时间 xff0
  • 物联网工程 | CAN(Controller Area Network)控制器局域网络答疑

    文章目录 概述一 CAN的物理设备二 CAN的物理传输三 CAN的多设备连接四 CAN编程 概述 本节以问答方式讲述CAN相关的一些疑点问题 一 CAN的物理设备 问 xff1a CAN需要什么样的物理设备支持才能算一个CAN网络 系统 x
  • 【无标题】

    前言 对于喜欢逛CSDN的人来说 xff0c 看别人的博客确实能够对自己有不小的提高 xff0c 有时候看到特别好的博客想转载下载 xff0c 但是不能一个字一个字的敲了 xff0c 这时候我们就想快速转载别人的博客 xff0c 把别人的博
  • VSCode中针对C语言的代码格式化配置

    默认格式化工具 打开设置 Ctrl 43 xff0c 选择 用户 配置 xff0c 找到 文本编辑器 Default Formatter xff1a 安装了C C 43 43 插件后 xff0c 即可选择 xff1a C C 43 43 m
  • 总结的常用的前端开发中的常见套路之购物车页面

    1 商品的全选和全不选 获取页面中全选框所在的input xff0c 绑定其变change事件获取全选框的状态遍历获取商品对应的CheckBox xff0c 设置其选中状态和全选的保持一致同时 xff0c 当全选框状态发生变化时 xff0c
  • restframework权限,认证,限流配置

    认证Authentication DRF框架的默认全局认证方案如下 REST FRAMEWORK 61 39 DEFAULT AUTHENTICATION CLASSES 39 39 rest framework authenticatio