在django应用中使用权限控制

本文涉及的产品
函数计算FC,每月15万CU 3个月
应用实时监控服务-用户体验监控,每月100OCU免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 【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。

目录
相关文章
|
1月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
78 1
|
1月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
41 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
1月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
119 0
|
1月前
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
20 0
|
1月前
|
存储 安全 UED
GitHub OAuth认证的Django应用
GitHub OAuth认证的Django应用
24 0
|
3月前
|
中间件 数据库连接 UED
Django中间件秘籍:如何用几行代码让你的应用变得超级强大?
【8月更文挑战第31天】中间件是Django框架的核心特性,位于视图与HTTP服务器之间,允许全局处理请求和响应,增强Web应用功能。通过实现`MiddlewareMixin`类的方法,如`process_request`和`process_response`,可以轻松实现请求预处理或响应后处理。中间件应用场景广泛,包括用户认证、CSRF防护和数据库连接管理等。创建并配置中间件需将其加入`settings.py`的`MIDDLEWARE`列表,顺序决定执行优先级。合理利用中间件能提高代码重用性和应用性能,带来更好的用户体验。
53 0
|
3月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
|
4月前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
194 6
|
5月前
|
API 数据安全/隐私保护 网络架构
在django3中配置应用的权限
【6月更文挑战第9天】该文档介绍了Django REST Framework的权限管理。总结来说,本文介绍如何设置严格项目权限和如何通过自定义权限控制对特定资源的访问。
56 10
在django3中配置应用的权限
|
4月前
|
安全 开发者 Python
告别迷茫,Django/Flask深入应用指南,让你的Web梦想照进现实!
【7月更文挑战第13天】在Python Web开发中,Django和Flask框架各具特色。Django适合快速构建企业级应用,提供ORM、模板引擎等全面功能;而Flask轻量灵活,适用于小项目和原型开发。通过实例,了解如何启动Django和Flask的基本应用,从创建项目到运行服务器。选择框架应考虑项目需求和个人偏好,不断学习与实践将助你实现Web梦想。
51 1
下一篇
无影云桌面