在django3中配置应用的权限

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【6月更文挑战第9天】该文档介绍了Django REST Framework的权限管理。总结来说,本文介绍如何设置严格项目权限和如何通过自定义权限控制对特定资源的访问。

简介权限

django3中项目权限限制如何开发?

question_ans.png

包括4种内置设置:AllowAny、IsAuthenticated、IsAdminUser和IsAuthenticatedOrReadOnly。

为了实现定制权限,如仅允许博客作者编辑其文章,自定义了IsAuthorOrReadOnly类,重载has_object_permission方法,允许任何人查看但仅作者和管理员能编辑。在views.py中应用此权限。

1 项目权限限制

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

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

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

1.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

小结

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

目录
相关文章
|
9月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
218 1
|
9月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
655 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
9月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
308 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
9月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
509 0
|
9月前
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
84 0
|
9月前
|
存储 安全 UED
GitHub OAuth认证的Django应用
GitHub OAuth认证的Django应用
110 0
|
12月前
|
API 数据库 数据安全/隐私保护
Django配置api、管理系统和视图
Django配置api、管理系统和视图
240 1
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
406 6
|
11月前
|
中间件 数据库连接 UED
Django中间件秘籍:如何用几行代码让你的应用变得超级强大?
【8月更文挑战第31天】中间件是Django框架的核心特性,位于视图与HTTP服务器之间,允许全局处理请求和响应,增强Web应用功能。通过实现`MiddlewareMixin`类的方法,如`process_request`和`process_response`,可以轻松实现请求预处理或响应后处理。中间件应用场景广泛,包括用户认证、CSRF防护和数据库连接管理等。创建并配置中间件需将其加入`settings.py`的`MIDDLEWARE`列表,顺序决定执行优先级。合理利用中间件能提高代码重用性和应用性能,带来更好的用户体验。
111 0
|
12月前
|
存储 JavaScript 前端开发
Django + Vue 实现图片上传功能的全流程配置与详细操作指南
 在现代Web应用中,图片上传是一个常见且重要的功能。Django作为强大的Python Web框架,结合Vue.js这样的现代前端框架,能够高效地实现这一功能。本文将详细介绍如何在Django项目中配置图片上传的后端处理,并在Vue前端实现图片的选择、预览和上传功能。