Django REST Framework(十九)权限

news2024/11/15 16:56:05

Django REST framework (DRF) 的权限认证涉及以下几个方面:全局权限配置、局部权限配置、自定义权限类、以及自定义认证类。以下是关于这些方面的详细说明:

1. 全局权限配置

在 Django 项目的配置文件 settings.py 中,可以全局配置 DRF 的权限管理类。这种设置适用于整个项目中的所有视图。默认情况下,如果不做任何配置,DRF 会允许所有用户访问视图(AllowAny)。

# settings.py
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',  # 仅允许已通过身份认证的用户访问
    )
}

在此配置下,所有视图都会默认要求用户通过身份认证,否则无法访问。

2. 局部权限配置

局部权限配置可以覆盖全局设置,适用于单独的视图或视图集。通过为视图类指定 permission_classes 属性,可以定义该视图的权限控制。

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

class ExampleView(APIView):
    permission_classes = [IsAuthenticated]  # 仅允许已认证用户访问该视图
    ...

局部配置让你可以在不同视图中应用不同的权限策略,提供了更灵活的控制。

3. 自定义权限类

有时内置的权限类不能满足所有需求,此时可以通过继承 rest_framework.permissions.BasePermission 类来创建自定义权限类。在这个类中,需要实现以下两个方法之一或全部:

  • .has_permission(self, request, view):判断用户是否有权访问视图。
  • .has_object_permission(self, request, view, obj):判断用户是否有权对特定模型对象执行操作。

例如,定义一个只允许角色为“xiaoming”的用户访问视图的权限类:

from rest_framework.permissions import BasePermission

class IsXiaoMingPermission(BasePermission):
    """
    仅允许角色为 'xiaoming' 的用户访问的自定义权限类
    """
    def has_permission(self, request, view):
        role = request.query_params.get("role")
        return role == "xiaoming"

    def has_object_permission(self, request, view, obj):
        # 这里可以加入对模型对象的权限控制逻辑
        return True

在视图中使用这个自定义权限类:

from .permissions import IsXiaoMingPermission
from rest_framework.viewsets import ModelViewSet
from student.models import Student
from student.serializers import StudentSerializer

class StudentViewSet(ModelViewSet):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer
    permission_classes = [IsXiaoMingPermission]  # 应用自定义权限类

4. 自定义认证类

自定义认证类用于扩展或替代 DRF 提供的默认认证机制(如 Session 认证、Basic 认证等)。自定义认证类需要继承 rest_framework.authentication.BaseAuthentication 并实现 authenticate(self, request) 方法。

from rest_framework.authentication import BaseAuthentication
from django.contrib.auth.models import User

class CustomAuthentication(BaseAuthentication):
    """
    自定义认证类,根据请求参数中的角色进行认证
    """
    def authenticate(self, request):
        role = request.query_params.get("role")
        if role == "root":
            user = User.objects.get(pk=1)  # 假设用户 ID 为 1 的是超级管理员
            return (user, None)
        return None

在视图中使用自定义认证类:

from .authentications import CustomAuthentication
from rest_framework.viewsets import ModelViewSet
from student.models import Student
from student.serializers import StudentSerializer

class Student1ModelViewSet(ModelViewSet):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer
    authentication_classes = [CustomAuthentication]  # 使用自定义认证类
    permission_classes = [IsAuthenticated]  # 使用内置权限类

5. 总结

通过全局配置、局部配置、自定义权限类和自定义认证类,可以实现复杂的权限和认证逻辑,满足项目中不同的安全需求。这种灵活性使得 Django REST framework 成为处理复杂 API 需求的强大工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

警惕!血脂偏高,这些身体信号你不可不知!

在快节奏的现代生活中,高血脂,这个看似“沉默的杀手”,正悄然威胁着越来越多人的健康。它不像感冒发烧那样有明显的症状,却能在不知不觉中侵蚀血管,增加心血管疾病的风险。今天,我们就来揭开高血脂的神秘面…

第四届中国RPA+AI开发者大赛火热报名中!

创新未来 第四届中国RPAAI开发者大赛 报名正式启动 数字化转型的加速推进为RPA技术带来了前所未有的发展机遇。AI技术的飞速进步,特别是在机器学习、自然语言处理和计算机视觉等领域的显著进展,已经大幅度扩展了RPA的应用范围。 据IDC研究报告预测&am…

windows共享文件给单个用户方法操作说明

如下图,我们想给学习视频这个文件夹共享出去,但是不想每个用户(Everyone)都可以访问,只允许本地账户ZZ可以访问,该如何操作呢?请见下面的内容。 右键这个文件夹,点击属性 点击图下所…

本地运行 AI 有多慢 ? 大模型推理测速 (llama.cpp, Intel GPU A770)

上文说到, 天下苦 N 卡久矣, 直接使用 CPU 推理又太慢. 那么, 在没有 N 卡的情况下, 本地运行 AI (神经网络) 大模型, 能够达到怎样的速度 ? 同志们好, 欢迎来到 胖喵穷人实验室 ! 这里专注于 低成本, 低难度, 低风险 的 “三低” 小实验. 胖喵穷人实验室 (PM-PLab-E)正式名称…

如何在算家云搭建模型Linly-Dubbing(语音识别)

一、模型介绍 Linly-Dubbing 是一个智能视频多语言 AI 配音和翻译工具,它融合了 YouDub-webui 的灵感,并在此基础上进行了拓展和优化。 该模型致力于提供更加多样化和高质量的配音选择,通过集成Linly-Talker的数字人对口型技术,…

零基础入门转录组数据分析——预后模型之多因素cox模型

零基础入门转录组数据分析——预后模型之多因素cox模型 目录 零基础入门转录组数据分析——预后模型之多因素cox模型1. 预后模型和多因素cox模型基础知识2. 多因素cox预后模型(Rstudio)——代码实操2. 1 数据处理2. 2 构建多因素cox模型(用输…

有色冶炼行业中的智能电动机保护器

低压电动机作为有色冶炼企业底层大量使用的设备,其异常运行不仅影响冶炼厂的正常生产,还会 威胁到人的生命安全,因此为电动机设置合适而又全面的保护至关重要。智能电动机保护器集保护、 遥测、通信、遥控、显示等功能于一体,是目…

基于大数据的水资源管理与调度优化研究【Web可视化、灰色预测、大屏设计】

需要本项目的私信博主 目录 1 引言 1.1 研究背景 1.2 国内外研究现状 1.3 研究目的 1.4 研究意义 2 关键技术理论介绍 2.1 Python语言 2.2 pandas 2.3 pyecharts 2.4 灰色预测 3 数据来源及处理 3.1 数据来源 3.2 数据处理 4 数据可视化分析及大屏设计 4.1 年度…

Windows下安装Kafka3

参考文章:Windows下安装Kafka3_kafka3 window-CSDN博客 安装配置Kafka 首先在官网 Apache Kafka 下载Kafka二进制压缩包。无论是在CentOS还是在Windows下都是下载该压缩包,里面已经包含了Kafka Linux和windows平台下的可执行文件了。选择目前比较新的3…

解决 JS WebSocket 心跳检测 重连

解决 JS WebSocket 心跳检测 重连 文章目录 解决 JS WebSocket 心跳检测 重连一、WebSocket 心跳检测的作用二、心跳检测的处理方案1. 创建 WebSocket 连接2. 心跳参数设置3. 心跳检测逻辑4. 心跳包响应处理5. 断线重连机制 三、总结 一、WebSocket 心跳检测的作用 WebSocket 是…

计量校准企业的生产制造,具备什么实际的作用?

计量校准行业已经发展了几十年,从建国后成立的计量所,建立了计量规范,到如今百花齐放,各类机构不断涌出,可供企业选择的计量机构可谓是越来越多,那么实际意义上,计量校准企业的生产制造&#xf…

草莓成熟度检测检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

草莓成熟度检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

【ragflow】安装2:源码安装依赖

中文文档【ragflow】安装1: docker:失败官方说的成功 docker 安装的启动失败 重新来一遍,不会重新拉取: root@k8s-master-pfsrv:/home/zhangbin/perfwork/rag# cd ragflow/ root@k8s-master-pfsrv:/home/

基于数字孪生智慧机场建设方案(53页PPT)

方案介绍: 数字孪生技术是一种通过数字化方式创建物理实体的虚拟模型,并借助历史数据、实时数据以及算法模型,模拟、验证、预测、控制物理实体过程的技术手段。在智慧机场建设中,该技术通过构建机场的虚拟镜像,实现机…

软件设计师全套备考系列文章15 -- 数据库:规范化、控制功能、大数据

软考-- 软件设计师(15)-- 数据库:规范化、控制功能、大数据 文章目录 软考-- 软件设计师(15)-- 数据库:规范化、控制功能、大数据前言一、章节考点二、规范化三、数据库的控制功能四、大数据、数据仓库 前言…

深度解析HarmonyOS SDK实况窗服务源码,Get不同场景下的多种模板

HarmonyOS SDK实况窗服务(Live View Kit)作为一个实时呈现应用服务信息变化的小窗口,遍布于设备的各个使用界面,它的魅力在于将复杂的应用场景信息简洁提炼并实时刷新,在不影响当前其他应用操作的情况下,时…

车载通信框架--- 以太网重连Port口相关思考

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

C语言补习课

来源:黑马程序员 C语言常用占位符 1.%d 或 %i:用于输出有符号整数(int)。 2.%u:用于输出无符号整数(unsigned int)。 3.%f:用于输出浮点数(float或double&#xff09…

美学设计:重塑中国商业竞争力的关键驱动力,美学革命:中国商业竞争的新战场

​在中国经济发展的滚滚洪流中,一场悄无声息却又波澜壮阔的革命正在上演。这不是技术的革新,不是商业模式的颠覆,而是一场关乎感官、情感与价值观的美学革命。 长久以来,中国企业在全球市场竞争中扮演着"世界工厂"的角色,以价格优势和规模效应称雄。然而,随着国内市…

element el-popover组件 查看示例图片功能实现

el-popover查看示例图片 官网文档:element ui 用于vue2 和element plus 用于vue3 https://element.eleme.cn/#/zh-CN/component/popover http://element-plus.org/zh-CN/component/popover.html 常见属性 <el-popover :width"400" trigger"hover" pl…