首页 Crazy Frog中文网
领取MOLI红包

Crazy Frog中文网

你的位置:RFOX中文网 > Crazy Frog中文网 > django自带的权限管理Permission用法说明

django自带的权限管理Permission用法说明

发布日期:2025-01-03 18:26    点击次数:52
前言 一些公司内部的CMS系统存在某些内容让指定的用户有权限访问,这时候可以用django自带的权限管理进行限制,比较方便。 缺点:django自带的权限是针对model(模型)的,不能针对单条数据,要针对单条数据需要额外的操作。 默认的权限(add, change, delete, view) django针对每个模型,生成了四个默认的权限(add, change, delete, view)。例如,我有一个model叫Log,那么这四个默认权限在数据库的存储格式为: 表auth_permission(注:id字段的值是随便取的,使用python manage.py migrate的时候会自动生成) id name content_type_id codename 1 Can add log 7 add_log 2 Can change log 7 change_log 3 Can delete log 7 delete_log 4 Can view log 7 view_log 字段解释 id:自动生成的 name: 描述权限的的内容,无太大的实际作用 content_type_id:与django_content_type中的id字段对应 codename:权限表示值,换句话说用add_log来表示用户对Log模型有新增权限。验证权限的时候就是验证这个值 那如果我的模型叫Student呢,把上面表中的log替换成student就行了。 name字段中Can add xx,Can change xx等都是固定的,只有xx是根据模型来的。 同理,codename字段也是一样,add_xxx,change_xxx。 auth_permission表中content_type_id字段还没有解释,先来看下面这张表: 表django_content_type id app_label model 1 admin logentry 3 auth group 2 auth permission 4 auth user 5 contenttypes contenttype 6 sessions session 7 test log 字段解释 id:自增字段;auth_permission表的content_type_id字段就对应这个值 app_label:属于哪个app包,上面的Log就是test app下的模型 model:模型名字 使用方法 在函数中验证权限,使用user.has_perm 例如:我们有一个书店,有普通员工A(model User),现在需要去出版社订购一批书(model Book),我们判断这个人是否有权利添加(add_book)书籍。 为什么验证权限的时候前面要加app名,很好理解啊,不同app有同样名字的权限,到底是验证哪个呢? 验证函数是否有执行权限,使用@permission_required permission_required有三个参数: perm,描述权限的字符串,格式为:app名.权限。如"auth.add_user",“auth.delete_user” login_url,如果没有权限需要跳转的url字符串,如"/login",“https://www.baidu.com” raise_exception,boolean值,没有权限是否触发PermissionDenied异常,触发异常则直接返回,不会跳转到login_url指向的地址 在template上使用权限验证 第一种写法 首先,我们需要在app的根目录下创建一个名为templatetags的包(IDEA会自动在包下创建__init__文件),接着在包里面创建一个文件my_tags.py,在my_tags.py里面定义一个过滤器has_permission,使用这个滤器对用户进行权限验证,它接收两个参数: user,当前登录的用户对象 perm,需要验证的权限字符串 接着,我们创建一个名为index.html的模板页面,一定要记得加载标签文件{% load my_tags %}。 目录结构: 演示结果,我已经登录过了,并且有权限了: 第二种写法 使用模板里面的全局变量perms,例如perms.test.add_department 自定义权限 首先,我在test app的model文件中建立了一个Department模型,然后给他增加了一个自定义权限。 执行下面语句进行数据库同步修改: python manage.py makemigrations python manage.py migrate 系统输出,说明增加成功 打开数据库验证,成功。 然后,我们就能像前面一样使用customize_permission这个权限了。 以上这篇django自带的权限管理Permission用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。