请教Django的User/Group/Permission管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教Django的User/Group/Permission管理相关的知识,希望对你有一定的参考价值。

参考技术A Django的用户权限体系是一个比较正规的RBAC(基于角色的访问控制)模型的实现。用户不能不能访问某个view,由其拥有的role角色判断,其拥有的角色由其用户自身拥有的角色集合+其所在的组拥有的角色集合的并集所决定。更详细的可以查查RBAC这个模型的说明。

Django 后台管理xadmin

一. xadmin的使用

  后台管理在开发中可以给我们提供很大的便利,django自带了一个后台管理admin,不过还有一个xadmin比django自带的好用一些,功能更加强大,为模型提供了版本控制,可以回滚数据。django中权限主要靠六表实现,首先是基础的user、group、permission三表,然后分别是user与group的多对多关系表、group与permission的多对多关系表,最后django特有的user与permission的多对多关系表。django基于用户user、组group、权限permission三张表的关系,一共六张表来实现权限管理。

  xadmin里面提供了权限的管理,而且使用很简单。

1.1 xadmin的使用流程

  1. 安装xadmin

  因为xadmin是基于Pillow模块的,所以需要先安装Pillow模块:

# 安装Pillow模块
pip install Pillow

# 安装xadmin第一种方式
pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2

# 安装xadmin第二种方式
pip install xadmin

  1.2 在配置的APP中注册xadmin

INSTALLED_APPS = [
    # ...
    # xamin主体模块
    xadmin,
    # 渲染表格模块
    crispy_forms,
    # 为模型通过版本控制,可以回滚数据
    reversion,
]

  1.3 xadmin数据库迁移

  因为xadmin是有自己的数据库模型类的,所以需要进行数据库迁移操作。

python manage.py makemigrations
python manage.py migrate

  1.4 在主路由中替换掉admin

# xadmin的依赖
import xadmin
xadmin.autodiscover()
# xversion模块自动注册需要版本控制的 Model
from xadmin.plugins import xversion
xversion.register_models()

urlpatterns = [
    # 将原本的admin路由改成以下方式即可
    path(rxadmin/, xadmin.site.urls),
]

  1.5 创建超级用户

# 在项目根目录下的终端
python manage.py createsuperuser

# 账号密码设置(随意设置):admin | admin

  1.6 完成xadmin全局配置:在APP下新建adminx.py

# xadmin全局配置
import xadmin
from xadmin import views

class GlobalSettings(object):
    """xadmin的全局配置"""
    site_title = "海贼学城"  # 设置站点标题
    site_footer = "海贼王有限公司"  # 设置站点的页脚
    menu_style = "accordion"  # 设置菜单折叠

xadmin.site.register(views.CommAdminView, GlobalSettings)

  配置前:
技术图片

  利用以上配置后,在项目的配置文件中修改时区与语言设置如下:

# 将英文改为中文
LANGUAGE_CODE = zh-hans

# 设定时区
TIME_ZONE = Asia/Shanghai

USE_I18N = True

USE_L10N = True

USE_TZ = True

  最终显示如下:

技术图片

  1.7 在adminx.py中注册model

from . import models
# 注册
xadmin.site.register(models.模型表名)

  同时模型表中字段可以增加verbose_name属性,表示后台管理时显示的名字。

  1.8 修改app:home的名字:xadmin页面上的显示效果

# APP下的__init__.py
default_app_config = "home.apps.HomeConfig"

# APP下的apps.py
from django.apps import AppConfig
class HomeConfig(AppConfig):
    name = home
    verbose_name = 我的首页

 

 

 

 

 

 

 

 

 

 

 

 

  

以上是关于请教Django的User/Group/Permission管理的主要内容,如果未能解决你的问题,请参考以下文章

如何在django查看一个group里的所有user

Django admin 中group的视图怎么添加选择user

请教pycharm如何手动安装第三方包/模块

RBAC——权限六张表

Django 后台管理xadmin

Django 13 admin和auth系统权限问题