前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django源码学习-24-Group

Django源码学习-24-Group

作者头像
小团子
发布2019-08-23 12:39:58
6370
发布2019-08-23 12:39:58
举报
文章被收录于专栏:数据云团

Django源码学习-23-Permission

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

代码语言:javascript
复制
from django.contrib.auth.models import Group

字段fields:

name:必需,80个字符或更少,例如, 'Awesome Users'。

permissions:ManyToManyField to Permission

代码语言:javascript
复制
group.permissions = [permission_list]group.permissions.add(permission, permission, ...)group.permissions.remove(permission, permission, ...)group.permissions.clear()

权限有很多,一个模型就有最少三个权限,如果一些用户拥有相同的权限,那么每次都要重复添加。这时候分组就可以解决这种问题了,可以把一些权限归类,然后添加到某个分组中,之后再把和把需要赋予这些权限的用户添加到这个分组中,就比较好管理了。分组使用的是django.contrib.auth.models.Group模型, 每个用户组拥有id和name两个字段,该模型在数据库被映射为auth_group数据表。

分组操作:

① 创建分组

代码语言:javascript
复制
Group.object.create(group_name)

② 某个分组上的权限,多对多的关系

代码语言:javascript
复制
group.permissions:

③ 添加权限

代码语言:javascript
复制
group.permissions.add:

④ 移除权限

代码语言:javascript
复制
group.permissions.remove:

⑤ 清除所有权限

代码语言:javascript
复制
group.permissions.clear:

⑥ 获取用户所属组的权限

代码语言:javascript
复制
user.get_group_permissions():

⑦ 某个用户上的所有分组,多对多的关系

代码语言:javascript
复制
user.groups
代码语言:javascript
复制
def operate_group(request):     # 创建一个分组     #组和权限是多对多关系 多个组可以拥有多个权限     # group = Group.objects.create(name='运营')     # content_type = ContentType.objects.get_for_model(Article)     # permissions = Permission.objects.filter(content_type=content_type)     # group.permissions.set(permissions)     # group.save()     #一个组拥有了权限 一个 用户拥有了组 不就等同于一个用户拥有了权限吗??    #给指定用户添加分组,用户和分组是多对多关系一个用户可以拥有多个组     # 定义user的时候并没有定义group那么 group是哪里来的??    # group = Group.objects.get(name='运营')     user = User.objects.get(telephone='123123')     # user.groups.add(group)     # user.save()     # 获取用户所属组的权限。    print(user.get_group_permissions())     #user.has_perm:     # user.has_perms 可以判断多个权限     # def has_perms(self, perm_list, obj=None):     # return all(self.has_perm(perm, obj) for perm in perm_list)     return HttpResponse('操作分组!')

1.首先判断user.permissions 下有没有这个权限,如果有:就True。

2.如果user.permissions下没有这个权限,就会判断所属分组下有没有这个权限;如果有则还是True。

在模板中使用权限:

在settings.TEMPLATES.OPTIONS.context_processors下,因为添加了django.contrib.auth.context_processors.auth上下文处理器,因此在模板中可以直接通过perms来获取用户的所有权限。

代码语言:javascript
复制
{% if perms.应用名.权限标识 %}    <!-- 这里是有权限才显示的内容 -->{% endif %}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档