在django应用中使用权限控制

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
云原生网关 MSE Higress,422元/月
应用实时监控服务ARMS - 应用监控,每月50GB免费额度
简介: 【6月更文挑战第6天】本文介绍在Django REST Framework中,项目权限通过默认设置如AllowAny、IsAuthenticated等管理。通过定制权限策略,确保了API的安全访问。

简介

在django3中为了实现更细粒度的控制,可以创建自定义权限类,如IsAuthorOrReadOnly,允许任何人查看但仅允许管理员和作者编辑。

这个类重写了has_object_permission方法,检查请求方法是否安全以及对象作者与请求用户是否匹配。在views.py中应用这个权限类,确保只有作者能编辑其博客文章。列表视图的对象级过滤需额外实现。

1 项目权限限制

在项目级别设置严格的权限策略,并根据需要在视图级别放宽策略。这就是我们要做的。
Django_REST_Framework随附了许多内置的项目级,我们可以使用的设置

• AllowAny - #任何用户,无论是否登录,全部权限。
• IsAuthenticated  -  #仅认证,注册 登录的用户
• IsAdminUser  -  #仅管理员,超级用户
• IsAuthenticatedOrReadOnly - #未经授权的用户可以查看任何页面,但只有认证用户可以编辑新建删除。

这四个设置中的任何一个都需要更新DEFAULT_PERMISSION_CLASSES,然后设置和刷新我们的网络浏览器。

2 自定义权限 Custom permissions

只希望特定博客帖子的作者能够对其进行编辑或删除;否则博客文章应为只读。
超级用户帐户应具有对帐户的完整CRUD访问权限 ,但常规用户testuser只可编辑自己的。

代码内部,Django REST Framework依赖于BasePermission类,所有其他每个任务类权限都从该BasePermission类继承。这意味着内置的权限设置(例如AllowAny,IsAuthenticated,其他自定义是将其扩展)。

由于我们的需求是 任何人都可以查看,但是只有管理员和作者可以编辑。将重载 has_object_permission方法。

如果请求包含HTTP SAFE_METHODS中包含动词(一个包含GET,OPTIONS和HEAD的元组),那么它是有只读的许可被授予

    # posts/permissions.py
    from rest_framework import permissions
    class IsAuthorOrReadOnly(permissions.BasePermission):
        def has_object_permission(self, request, view, obj):
            # Read-only permissions are allowed for any request
            if request.method in permissions.SAFE_METHODS:
                return True
            # Write permissions are only allowed to the author of a post
            return obj.author == request.user

关于创建,删除或编辑功能 在这种情况下,我们检查对象的作者是否匹配,这是我们的博客文章obj.author与发出请求request.user的用户匹配。

回到views.py文件中,我们应该导入IsAuthorOrReadOnly,然后我们可以添加Permission_PostDetail的类

请注意,通用视图将仅检查对象级权限以获取检索到的视图。一个模型实例。如果您需要对列表视图进行对象级过滤-对于以下内容的集合实例-您需要过滤的方法实现:

        https://www.django-rest-framework.org/api-guide/filtering/#overriding-the-initial-queryset

3 小结

设置严格的项目级别权限策略的想法,这样只有经过身份验证的用户才能查看API。

目录
相关文章
|
28天前
|
中间件 数据库连接 UED
Django中间件秘籍:如何用几行代码让你的应用变得超级强大?
【8月更文挑战第31天】中间件是Django框架的核心特性,位于视图与HTTP服务器之间,允许全局处理请求和响应,增强Web应用功能。通过实现`MiddlewareMixin`类的方法,如`process_request`和`process_response`,可以轻松实现请求预处理或响应后处理。中间件应用场景广泛,包括用户认证、CSRF防护和数据库连接管理等。创建并配置中间件需将其加入`settings.py`的`MIDDLEWARE`列表,顺序决定执行优先级。合理利用中间件能提高代码重用性和应用性能,带来更好的用户体验。
28 0
|
1月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
|
2月前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
124 6
|
2月前
|
安全 开发者 Python
告别迷茫,Django/Flask深入应用指南,让你的Web梦想照进现实!
【7月更文挑战第13天】在Python Web开发中,Django和Flask框架各具特色。Django适合快速构建企业级应用,提供ORM、模板引擎等全面功能;而Flask轻量灵活,适用于小项目和原型开发。通过实例,了解如何启动Django和Flask的基本应用,从创建项目到运行服务器。选择框架应考虑项目需求和个人偏好,不断学习与实践将助你实现Web梦想。
37 1
|
3月前
|
API 数据安全/隐私保护 网络架构
在django3中配置应用的权限
【6月更文挑战第9天】该文档介绍了Django REST Framework的权限管理。总结来说,本文介绍如何设置严格项目权限和如何通过自定义权限控制对特定资源的访问。
48 10
在django3中配置应用的权限
|
3月前
|
存储 JSON API
在django3应用中使用现代的JWT鉴权
【6月更文挑战第8天】本文介绍流行的鉴权方式,JSON Web Tokens (JWT) 是一种验证JSON数据所有者的机制,它是一个编码的、安全的字符串,包含可信任的数据且能加密签名。无状态的令牌认证允许客户端存储令牌并将其在每次请求。
48 8
在django3应用中使用现代的JWT鉴权
|
3月前
|
存储 安全 API
在django中创建项目时应用基础鉴权
【6月更文挑战第7天】本文探讨了在django中的API权限管理,即用户认证的两种方法:基础认证和会话认证。Django REST Framework默认使用会话认证,但也提供基础、令牌和JWT等其他选项。根据项目需求,应谨慎选择适合的认证方案。
74 3
在django中创建项目时应用基础鉴权
|
3月前
|
前端开发 JavaScript Linux
分离前后端react和django3构建的应用
【6月更文挑战第4天】在本文中,我们介绍了如何设置React前端并连接到Django后端。并讨论了前后端分离的好处,并计划扩展API以支持更多HTTP操作和用户身份验证功能。
93 5
分离前后端react和django3构建的应用
|
3月前
|
存储 前端开发 JavaScript
探索Django:打造高效、可扩展的Web应用(中)
探索Django:打造高效、可扩展的Web应用(中)
33 1
|
3月前
|
中间件 开发者 C++
Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用
Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用