前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django实战-信息资讯-CMS权限管理

Django实战-信息资讯-CMS权限管理

作者头像
小团子
发布2019-07-18 16:22:30
9630
发布2019-07-18 16:22:30
举报
文章被收录于专栏:数据云团数据云团

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

权限是能够约束用户行为和控制页面显示内容的一种机制。一个完整的权限应该包含3个要素: 用户,对象和权限,即什么用户对什么对象有什么样的权限。

对于本次项目中的应用,可以分为编辑组、财务组、管理员。Django 的权限permission 本质是 djang.contrib.auth 中的一个模型, 其与 User 的 user_permissions 字段是多对多的关系。在 INSTALLED_APP 里添加好 auth 应用之后,在执行完makemigrations 和 migrate 命令后,Django 就会为每一个安装的app中的模型(Model)自动创建4个可选的权限:add,delete,change和view(增/删/改/查)。可以通过admin将这些权限分配给不同用户。

  • auth_group

用户组

  • auth_group_permissions

用户组权限

  • auth_permission

用户权限

① ContentType 将模型和app进行关联

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

ContentType 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。

models.py文件的表结构写好后,通过 makemigrations 和 migrate 两条命令迁移数据后,在数据库中会自动生成一个 django_content_type 表。每当创建了新的 model并执行数据库迁移后,ContentType 表中就会自动新增一条记录。

② Group 用户组

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

用户组(Group)和 User 模型是多对多的关系。其作用在权限控制时可以批量对用户的权限进行管理和分配,而不用一个一个用户分配,节省工作量。将一个用户加入到一个Group中后,该用户就拥有了该Group所分配的所有权限。

django.contrib.auth.models.Group 定义了用户组的模型, 每个用户组拥有 id 和 name 两个字段, 该模型在数据库被映射为 auth_group 数据表。

User 对象中有一个名为 groups 的多对多字段, 多对多关系由 auth_user_groups数据表维护。Group 对象可以通过 user_set 反向查询用户组中的用户。可以通过创建删除 Group 对象来添加或删除用户组。

③ Permission 权限

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

权限都是django.contrib.auth.Permission的实例。这个模型包含三个字段,name、codename以及content_type,其中的 content_type 表示这个permission是属于哪个app下的哪个models。

④ 自定义 Command 命令

代码语言:javascript
复制
from django.core.management.base import BaseCommand

Django 对于命令的添加有一套规范,可以为每个app 指定命令,比如在使用manage.py文件执行命令的时候,可以自定制命令,来实现命令的扩充。

1、在 app 内创建一个management 的python目录

2、在 management 目录里面创建 commands 的 python 文件夹

3、在 commands 文件夹下创建任意py文件

此时py文件名就是自定义命令名,可以使用下面方式执行:

代码语言:javascript
复制
python manage.py 命令名

Django的Command命令是要放在一个app的management/commands目录下的。

初始化分组

代码语言:javascript
复制
from apps.news.models import News, NewsCategory, Banner, Conment
from apps.course.models import Course, CourseCategory, CourseOrder
from apps.payinfo.models import PayinfoOrder, Payinfo
代码语言:javascript
复制
from django.core.management.base import BaseCommand
from django.contrib.auth.models import Group, Permission, ContentType
代码语言:javascript
复制
代码语言:javascript
复制
class Command(BaseCommand):
    def handle(self, *args, **options):
        # 编辑组
        # python manage.py initgroup
        # 编辑人员的权限,编辑文章/轮播图/付费咨询/课程
        edit_content_types = [
            ContentType.objects.get_for_model(News),
            ContentType.objects.get_for_model(NewsCategory),
            ContentType.objects.get_for_model(Banner),
            ContentType.objects.get_for_model(Conment),
            ContentType.objects.get_for_model(Course),
            ContentType.objects.get_for_model(CourseCategory),
            ContentType.objects.get_for_model(Payinfo),
        ]
        edit_permissions = Permission.objects.filter(content_type__in=edit_content_types)
        editGroup = Group.objects.create(name='编辑')
        editGroup.permissions.set(edit_permissions)

        # 创建财务组
        finance_content_types = [
            ContentType.objects.get_for_model(CourseOrder),
            ContentType.objects.get_for_model(PayinfoOrder)
        ]
        finance_permissions = Permission.objects.filter(content_type__in=finance_content_types)
        financeGroup = Group.objects.create(name='财务')
        financeGroup.permissions.set(finance_permissions)

        # 创建管理员分组
        admin_permissions = edit_permissions.union(finance_permissions)
        adminGroup = Group.objects.create(name='管理员')
        adminGroup.permissions.set(admin_permissions)

        self.stdout.write(self.style.SUCCESS('初始化分组已经添加成功'))
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Django 对于命令的添加有一套规范,可以为每个app 指定命令,比如在使用manage.py文件执行命令的时候,可以自定制命令,来实现命令的扩充。
  • 1、在 app 内创建一个management 的python目录
  • 2、在 management 目录里面创建 commands 的 python 文件夹
  • 3、在 commands 文件夹下创建任意py文件
  • Django的Command命令是要放在一个app的management/commands目录下的。
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档