iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >[Python学习] Django 权限
  • 698
分享到

[Python学习] Django 权限

权限PythonDjango 2023-01-31 05:01:02 698人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

本文为大家讲解 Django 框架里自带的权限模型,从理论到实战演练,带领大家了解 Django 里权限是怎么一回事。主要内容什么是权限管理?Web 权限Django 权限机制Django 的权限项权限应用Permission(一)Perm

本文为大家讲解 Django 框架里自带的权限模型,从理论到实战演练,带领大家了解 Django 里权限是怎么一回事。


主要内容


什么是权限管理?

Web 权限

Django 权限机制

Django 的权限项

权限应用

  • Permission(一)

  • Permission(二)

  • User Permission 管理(一)

  • User Permission 管理(二)

  • Group Permission 管理

  • 权限验证(一)

  • 权限验证(二)

  • 权限验证(三)

  • 权限验证(四)


什么是权限管理


  • 权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源

  • 权限管理好比如钥匙,有了钥匙就能把门打开,但是权限设置是有级别之分的,假如这个系统有多个权限级别就如一间屋有多个门,想要把所有门都打开您必须要取得所有的钥匙,就如系统一样。


Web 权限


WEB 里权限管理是 Web 应用项目中比较关键的环节,因为浏览器是每一台计算机都已具备的,如果不建立权限管理系统,那么一个“非法用户”可以轻而易举通过浏览器访问Web应用项目中的所有功能。因此需要权限管理系统进行权限检测,让经过授权的用户可以正常合法的使用已授权的功能,而对那些未授权的非法用户拒之门外。 一个好的权限管理系统应该对每一类或每一个用户,分配不同的系统操作权限,并应具有扩展性,也就是它可以加入到任何一个带有权限管理的 Web 应用项目中,就像构件一样可以被重复使用。 同时,还要提醒开发者,开发一个 Web 应用项目时,应尽可能的将整个系统细化,分解为若干个子模块,最后组合成一个完整的应用。也只有这样,才容易实现为每一类或每一个用户分配不同的操作权限。


Django 权限机制


  • Django 权限机制能够约束用户行为,控制页面的显示内容,也能使 api 更加安全和灵活;用好权限机制,能让系统更加强大和健壮

  • DjanGo 用 user, group 和 permission 完成了权限机制,这个权限机制是将属于 model 的某个 permission 赋予 user 或 group,可以理解为全局的权限,即如果用户A对数据模型(model)B 有可写权限,那么 A 能修改model B 的所有实例(objects)。group 的权限也是如此,如果为 group C 赋予 model B 的可写权限,则隶属于 group C 的所有用户,都可以修改model B 的所有实例。


Django 的权限项


  • Django 用 permission 对象存储权限项,每个model默认都有三个permission,即 add model, change model 和 delete model

  • permission 总是与 model 对应的,如果一个 object 不是 model 的实例,我们无法为它创建/分配权限


权限应用


  1. Permission

  2. User Permission

  3. Group Permission

  4. 权限检查

◆ Permission(一)

Django 定义每个 model 后,默认都会添加该 model 的 add, change 和 delete三个 permission,自定义的 permission 可以在我们定义 model 时手动添加

class Server(models.Model):
     ...    
    class Meta:        
        permissions = (            
            ("view_server", "can view server"),            
            ("change_server_status", "Can change the status of server"),        
        )


◆ Permission(二)


  • 每个 permission 都是 django.contrib.auth.Permission 类型的实例,该类型包含三个字段 name, codename 和 content_type,

  • content_type 反应了 permission 属于哪个 model,

  • codename 如上面的 view_server,代码逻辑中检查权限时要用,

  • name 是 permission 的描述,将 permission 打印到屏幕或页面时默认显示的就是 name

◆ User Permission管理(一)

User 对象的 user_permission 字段管理用户的权限 
user = User.objects.get(username="rock") 
user.user_permissions = [permission_list] 
user.user_permissions.add(permission, permission, …) #增加权限 
user.user_permissions.remove(permission, permission, …) #删除权限 
user.user_permissions.clear() #清空权限 
# 注:上面的 permission 为 django.contrib.auth.Permission 类型的实例

# 示例演示:
In [3]: from django.contrib.auth.models import User    #导入用户模块
In [6]: user = User.objects.get(username="nick")     #获取用户对象
In [7]: user.user_permissions.all()                        # 查看用户权限
Out[7]: []
In [8]: from django.contrib.auth.models import Permission    #导入权限模块
In [10]: Permission.objects.get(pk=43)                        #获取权限信息
Out[10]: <Permission: dashboard | server | 访问服务器信息>
In [11]: Permission.objects.filter(pk=43)                        #获取权限信息(以列表形式输出)
Out[11]: [<Permission: dashboard | server | 访问服务器信息>]
In [12]: user.user_permissions = Permission.objects.filter(pk=43)      #赋予用户权限(赋予权限不需要保存)
In [13]: user.user_permissions.all()                        #查看用户当前权限
Out[13]: [<Permission: dashboard | server | 访问服务器信息>]
In [18]: user.user_permissions.add(Permission.objects.get(pk=43))            #add添加权限(必须是一个Permission实例,否则报错)
In [40]: user.user_permissions.all()
Out[40]: [<Permission: dashboard | department | Can change department>, <Permission: dashboard | server | 访问服务器信息>]
In [41]: user.user_permissions.remove(Permission.objects.get(pk=43))      #remove移除权限(必须是一个Permission实例,否则报错)
In [42]: user.user_permissions.all()
Out[42]: [<Permission: dashboard | department | Can change department>]


◆ User Permission 管理(二)


  • 检查用户权限用 has_perm() 方法:

myuser.has_perm(’dashboard.view_server')

has_perm() 方法的参数,即 permission 的 codename,但传递参数时需要加上  model 所属 app 的前缀,无论 permission 赋予 user 还是 group,has_perm()方法均适用 


  • 列出用户的所有权限

user.get_all_permissions()
  • 列出用户所属group的权限

user.get_group_permissions()


◆ Group Permission 管理

group permission 管理逻辑与 user permission 管理一致,group 中使用permissions 字段做权限管理:  
group.permissions = [permission_list] 
group.permissions.add(permission, permission, …) 
group.permissions.remove(permission, permission, …) 
group.permissions.clear()

◆ 权限验证(一)

  • 在视图中验证权限—— permission_required

  • 当业务逻辑中涉及到权限检查时,decorator 能够分离权限验证和核心的业务逻辑,使代码更简洁,逻辑更清晰。permission 的 decorator 为permission_required

from django.contrib.auth.decorators import permission_required 
@permission_required(’dashboard.view_server') 
def my_view(request):
    ...


◆ 权限验证(二)


在类视图中验证

from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required, permission_required
class ServerView(TemplateView):
    @method_decorator(login_required)
    @method_decorator(permission_required(“dashboard.view_server”)
    def get(self, request, *args, **kwargs):
   ……


◆ 权限验证(三)


views 中验证

if not request.user.has_perm(’dashboard.view_server')
    return HttpResponse('Forbidden')


◆ 权限验证(四)


Template 中的权限检查

{% if perms.dashboard.view_server %}    
    有权限
{% endif %}


◆ 扩展阅读:

使用 Django 认证系统:http://python.usyiyi.cn/translate/django_182/topics/auth/default.html



--结束END--

本文标题: [Python学习] Django 权限

本文链接: https://www.lsjlt.com/news/189238.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • [Python学习] Django 权限
    本文为大家讲解 Django 框架里自带的权限模型,从理论到实战演练,带领大家了解 Django 里权限是怎么一回事。主要内容什么是权限管理?Web 权限Django 权限机制Django 的权限项权限应用Permission(一)Perm...
    99+
    2023-01-31
    权限 Python Django
  • Linux 权限理解和学习
    ✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Don’t argue with the pe...
    99+
    2023-08-30
    linux 学习 服务器 centos 权限
  • Python django学习之:mod
    1. 建立app在自己的工程项目目录下输入:python manage.py startapp myapp(你想建立的app名称)建立一个叫myapp的app这样,在你的工程项目目录下会出现一个叫myapp的目录2. 创建Model在app...
    99+
    2023-01-31
    Python django mod
  • django rbac权限
    > startapp rbac models.py from django.db import models class User(models.Model): name=models.CharField(max_l...
    99+
    2023-01-30
    权限 django rbac
  • Python Web框架Django学习
    python web框架Django学习(二)目录: 三、Django创建APP 四、创建登录页面,实现用户交互,后台管理用户(非数据库方式)=================================================...
    99+
    2023-01-31
    框架 Python Web
  • python学习--Django虚拟环境
    一 . 为什么选择搭建虚拟环境   搭建一个只对本次项目有用的虚拟环境,而不影响主环境 二 . 安装前准备   #    1. 安装 python  #    2. 安装virtualenvwrapper  #    3. 虚拟环境相关操...
    99+
    2023-01-30
    环境 python Django
  • 如何利用MySQL学习MongoDB中的授权和权限
    如何利用MySQL学习MongoDB中的授权和权限,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  数据库的安全性是每一个DBA重点关注的部分...
    99+
    2024-04-02
  • Python自动化开发学习-Django
    django amdin是django提供的一个后台管理页面,该管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查。 创建一个项目,或者是用已有的项目使用下面的命令创建生成数据库,这里虽...
    99+
    2023-01-31
    Python Django
  • Python Django 与机器学习:探索 web 应用的无限可能
    Django 的优势 快速开发和可扩展性: Django 的模型-模板-视图 (MTV) 架构极大地简化了 Web 应用程序的开发,使其具有可扩展性,可以处理不断增长的用户群和复杂的功能。 安全性: Django 内置了强大的安全功能,...
    99+
    2024-04-02
  • Django学习之十: staticfi
    目录 Django学习之十: staticfile 静态文件 理解阐述 静态文件 Django对静态文件的处理 其它方...
    99+
    2023-01-30
    Django staticfi
  • Django 入门学习(3)
    在例4的基础上,我希望直接保存数据到数据库中。 Django自带了一个sqlite的数据库,已经配置好了 可以直接使用。使用方式和sqlalchemy类似,相当于一个内置的ORM框架。settings.py 默认已经绑定了sqlite3DA...
    99+
    2023-01-31
    入门 Django
  • 【代码】Django学习笔记
      一些设置setting.py DEBUG = True ALLOWED_HOSTS = ['*'] DATABASES = { 'default': { 'ENGINE': 'django.db.backe...
    99+
    2023-01-31
    学习笔记 代码 Django
  • Django学习之配置篇
    MTV Model Template View 数据库 模版文件 业务处理 了解Django框架,功能齐全 一.安装Django&Django基本配置 安装Django pip3 django 配置Django 1.配置Dja...
    99+
    2023-01-30
    Django
  • 「Python 学习笔记」中,如何使用 Django shell?
    Python 是一门高级编程语言,而 Django 是基于 Python 的一个开源 Web 框架。在 Django 中,shell 是一个非常重要的命令行工具,它可以让开发者在控制台中直接与 Django 应用程序交互。在本文中,我们将会...
    99+
    2023-11-02
    学习笔记 django shell
  • django权限管理怎么设置
    在Django中,权限管理可以通过以下步骤进行设置:1. 在`settings.py`文件中设置`AUTHENTICATION_BA...
    99+
    2023-10-07
    django
  • python+django+mysql学
     安装python 1. 从 http://www.python.org/download/ 下载最新的python版本 (我用的是python2.72, 当时最稳定的) 2. 然后一路next, 安装到你想要的目录下 3. 然后更改pa...
    99+
    2023-01-31
    python django mysql
  • Python 中的 path 和 django:如何有效地学习?
    Python 是一门非常强大的编程语言,它在数据科学和机器学习等领域表现出色。但是,Python 不仅仅局限于这些领域,它还可以用于 Web 开发。在 Python 中,path 和 django 是两个重要的概念。本文将介绍这两个概念并...
    99+
    2023-10-03
    教程 path django
  • Django如何实现RBAC权限管理
    目录Django RBAC权限管理概述流程图总结Django RBAC权限管理 概述 RBAC(Role-Based Access Control,基于角色的访问控制),通过角色绑定...
    99+
    2022-12-20
    Django RBAC权限管理 Django RBAC RBAC权限管理
  • Python学习
    Python是创始人吉多•范罗苏姆(Guido van Rossum)在1989年圣诞节期间,在阿姆斯特丹,为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,而在给自己新创造的计算机语言起名字的时候,由于其是,自于七十年代风靡全球的英国六...
    99+
    2023-01-31
    Python
  • 学习python
    亲爱的朋友:     欢迎你!很高兴能在这里见到你,你能来到这里说明你真的很喜欢python,很想把python给学好!我觉的你很幸运,开始我学python的时候比较少资料,学起来也比较头疼,现在随着python越来越流行,资料也越来越多,...
    99+
    2023-01-31
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作