在django3中配置应用的权限

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
云原生网关 MSE Higress,422元/月
简介: 【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。

目录
相关文章
|
3月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
123 1
|
2月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
112 1
|
11月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
251 1
|
11月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
690 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
11月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
366 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
11月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
660 0
|
11月前
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
106 0
|
11月前
|
存储 安全 UED
GitHub OAuth认证的Django应用
GitHub OAuth认证的Django应用
132 0
|
API 数据库 数据安全/隐私保护
Django配置api、管理系统和视图
Django配置api、管理系统和视图
279 1
|
中间件 数据库连接 UED
Django中间件秘籍:如何用几行代码让你的应用变得超级强大?
【8月更文挑战第31天】中间件是Django框架的核心特性,位于视图与HTTP服务器之间,允许全局处理请求和响应,增强Web应用功能。通过实现`MiddlewareMixin`类的方法,如`process_request`和`process_response`,可以轻松实现请求预处理或响应后处理。中间件应用场景广泛,包括用户认证、CSRF防护和数据库连接管理等。创建并配置中间件需将其加入`settings.py`的`MIDDLEWARE`列表,顺序决定执行优先级。合理利用中间件能提高代码重用性和应用性能,带来更好的用户体验。
122 0