当前位置: 首页 > news >正文

django permission_classes = [AllowAny] 如何限制到具体接口

在 Django REST framework (DRF) 中,permission_classes 用于定义哪些用户可以访问给定的视图。当你使用 AllowAny 作为权限类时,这表示任何用户都可以访问该视图,无论他们是否通过认证。如果你想限制访问到具体的接口,但又不想让任何用户都能访问,你可以使用其他权限类,例如 IsAuthenticated 或自定义权限类。

使用 IsAuthenticated
如果你希望只有已认证的用户才能访问某个接口,你可以将权限类设置为 IsAuthenticated。

from rest_framework.permissions import IsAuthenticated

class MyView(APIView):
permission_classes = [IsAuthenticated]

def get(self, request, *args, **kwargs):# 只有已认证的用户可以访问这个GET请求pass

自定义权限类
如果你需要更细粒度的控制,比如基于用户的角色或特定条件来限制访问,你可以创建一个自定义的权限类。

from rest_framework.permissions import BasePermission

class IsAdminOrReadOnly(BasePermission):
def has_permission(self, request, view):
if request.method in permissions.SAFE_METHODS:
return True
return request.user.is_staff

class MyView(APIView):
permission_classes = [IsAdminOrReadOnly]

def get(self, request, *args, **kwargs):# 任何用户都可以GET请求,但只有管理员可以POST、PUT、DELETE等请求pass

结合使用多个权限类
你也可以结合使用多个权限类,例如允许所有用户GET请求,但只有管理员可以POST请求。

from rest_framework.permissions import IsAuthenticated, AllowAny, IsAdminUser
from rest_framework import permissions

class MyView(APIView):
permission_classes = [AllowAny] # 允许所有用户GET请求

def get(self, request, *args, **kwargs):# 任何用户都可以GET请求passdef post(self, request, *args, **kwargs):# 只有管理员可以POST请求return self.permission_denied(request, message="仅管理员可以POST", code=403)

注意,在上面的代码中,我们实际上没有在 permission_classes 中直接设置 IsAdminUser 来限制POST方法,而是在POST方法内部手动返回权限拒绝。这是因为DRF不直接支持在单个视图中对不同HTTP方法应用不同的权限类。为了实现这一功能,你可以在方法内部进行权限检查,或者使用更高级的视图或路由配置方法(如方法装饰器)。例如:

from rest_framework.decorators import permission_classes
from rest_framework.permissions import IsAdminUser

class MyView(APIView):
permission_classes = [AllowAny] # 允许所有用户GET请求

@permission_classes([IsAdminUser])
def post(self, request, *args, **kwargs):# 只有管理员可以POST请求pass

这种方法使用了DRF的装饰器来为特定方法指定权限类。这样可以更灵活地控制不同HTTP方法的访问权限。

http://www.lryc.cn/news/611643.html

相关文章:

  • 时间轮算法
  • Java学习第一百一十一部分——Jenkins(二)
  • docker-compose快速部署启动file beat+ELK
  • Git 分支管理:从新开发分支迁移为主分支的完整指南
  • Agent安全机制:权限控制与风险防范
  • 商派小程序商城(小程序/官网/APP···)的范式跃迁与增长再想象
  • C语言基础_排序算法和二分法查找
  • GROUP BY与ORDER BY的索引优化方法
  • 脑洞大开——AI流程图如何改变思维?
  • 深入解析Java NIO在高并发场景下的性能优化实践指南
  • 企业网络安全中人工智能(AI)的影响
  • 使用MatterJs物理2D引擎实现重力和鼠标交互等功能,有点击事件(盒子堆叠效果)
  • HTML应用指南:利用GET请求获取全国OPPO官方授权体验店门店位置信息
  • nlp-词汇分析
  • easyExcel 读取有合并单元格数据
  • EasyExcel高效工具类:简化Excel导入导出,支持多Sheet与枚举转换
  • QT----QAxObject在子线程中调用,发现excel指针为空
  • Excel制作尖刀图,直观展示业绩涨跌
  • EXCEL-业绩、目标、达成、同比、环比一图呈现
  • 从“T+1”到“T+0”:基于SQL构建MES到数据仓库的数据采集通道
  • OpenGL VBO:顶点缓冲对象的深度解析
  • 点穴式优化:用DeepSeek精准识别关键节点的产品体验突破法
  • PostgreSQL报错“maximum number of prepared transactions reached”原因及高效解决方案解析
  • 推荐一款优质的开源博客与内容管理系统
  • Mac安装WebStorm
  • C++11实现线程池(2)固定线程池
  • Java Stream API 详解(Java 8+)
  • 云计算一阶段Ⅱ——12. SELinux 加固 Linux 安全
  • 8.6学习总结
  • AI增强的软件测试工具