Python中Django有没有非超级管理员的后台自动生成方案?

请教一下各位。公司想做一个小型的 b2b 平台。django 可以自动生成后台管理页面,并且可以在 admin 编辑。请问是否有非超级管理员的后台管理自动生成功能?或者修改一下设置达到这种效果?这样,商家的后台可以自动生成,可以极大提升项目效率。
Python中Django有没有非超级管理员的后台自动生成方案?

9 回复

Mark 关注一下,之前有过类似的需求


Django自带admin后台,默认只有超级用户(is_superuser=True)能访问。要让非超级管理员也能用,关键在于权限控制。Django的权限系统基于模型,通过User模型的user_permissions字段和Group模型来管理。

最直接的方法是给普通用户分配特定模型的权限,然后让他们访问admin。但默认admin只对staff用户(is_staff=True)开放。所以,你需要:

  1. 创建普通用户,设置is_staff=True(允许进入admin),但保持is_superuser=False
  2. 通过Django的权限系统,给这个用户或他所在的组分配具体的权限(如app_label.view_modelname, app_label.change_modelname等)。

示例:创建一个有文章管理权限的编辑用户

假设你有个博客应用blog,里面有Post模型。

# 在Django shell中操作,或写在管理命令/视图中
from django.contrib.auth.models import User, Permission
from django.contrib.contenttypes.models import ContentType
from blog.models import Post

# 1. 创建用户,设为staff
editor = User.objects.create_user(username='editor', password='somepassword')
editor.is_staff = True  # 关键!允许进入/admin
editor.save()

# 2. 获取Post模型的content type
content_type = ContentType.objects.get_for_model(Post)

# 3. 获取Post模型的所有权限(或只选你需要的)
permissions = Permission.objects.filter(content_type=content_type)
# 例如,只分配查看和修改权限:
# change_perm = Permission.objects.get(codename='change_post', content_type=content_type)
# view_perm = Permission.objects.get(codename='view_post', content_type=content_type)

# 4. 将权限分配给用户
editor.user_permissions.set(permissions)  # 分配所有权限
# 或 editor.user_permissions.add(change_perm, view_perm)

# 现在,用户'editor'可以登录/admin,但只能看到并操作Post模型。

更清晰的管理:使用组(Group)

对于多个用户有相同角色,用组更方便。

from django.contrib.auth.models import Group

# 创建“编辑”组
editors_group, created = Group.objects.get_or_create(name='Editors')
# 给组分配权限
editors_group.permissions.set(permissions)  # 使用上一步的permissions

# 将用户加入组
editor.groups.add(editors_group)

自定义admin界面显示

默认admin会显示用户有权限的所有模型。如果你想进一步控制,可以自定义ModelAdminhas_view_permission, has_change_permission等方法,但通常分配标准权限就够了。

一句话总结:把用户is_staff设为True,然后通过Django的权限系统精确控制他能访问的模型和操作。

如果你的 user table 是 django 自带的话,超级用户和普通用户都是一条数据,区别只是权限而已。如果是自定义的 user 表,其实也差不多,都是要 override save(),同时在 django 的 user table 里给商家创建个用户。但是不大建议用 django admin 直接给商家做后台,随便点复杂的功能都得重写自带的模板,何况你还是 b2b 的商户平台,有那功夫用自己顺手的前端架子也都撸出来了,可定制性还高很多

django admin 自带了权限管理,用户分为 staff, superuser。可以给商家用户为 staff, 然后给与相应的表的访问权限。只能精确到表一级。也就是说同一个表 A 商户可以访问 B 商户的数量。如果要更精确需要利用第三方类库来管理行级别的权限,或者可以简单的在表里添加 created_by 字段,然后定制一下 admin 过滤出来商户自己的商品。

我們團隊做了一套,基於 ant design 的 Django 管理後台。

求一下

商家的后台可以自动生成,但商家的需求能不能抽象化,如果不能旧没有通用系统,必须定制话

区别只是权限啊~可以自己写一套~

不一一回复了。多谢各位指点。

回到顶部