Django怎么实现基于角色的权限_Python利用Group与Permission控制访问

张开发
2026/4/13 19:53:06 15 分钟阅读

分享文章

Django怎么实现基于角色的权限_Python利用Group与Permission控制访问
给用户分配角色需显式调用user.groups.add(group_instance)权限绑定须运行makemigrations生成自定义权限再通过group.permissions.add(perm)添加permission_required失效主因是权限字符串错误或用户未加入对应组。怎么给用户分配角色GroupGroup 是 Django 权限体系里最轻量、也最常用的角色抽象它不强制你写模型或继承类直接复用内置的 Group 模型就行。关键不是“建多少组”而是“谁在什么场景下改组”——比如后台管理员手动加注册时自动进默认组或者通过 API 动态同步。常见错误是把权限直接塞进 Group 之后就不管了结果用户登录后 request.user.has_perm(blog.delete_post) 还是返回 False忘了用户得显式加入该 Group。添加用户到组user.groups.add(group_instance) 或 user.groups.add(123)传 ID 也行从组移除user.groups.remove(group_instance)清空所有组user.groups.clear()注意这不会删权限只清组关联检查是否在某组user.groups.filter(nameeditor).exists()比 in 更可靠避免缓存/延迟问题Permission 怎么绑定到模型和视图Django 的 Permission 默认随每个模型自动生成 add_、change_、delete_、view_ 四种但仅当模型定义了 Meta.permissions 才能扩展自定义项比如 (publish_post, Can publish post)。容易踩的坑是写了 Meta.permissions 却没跑 python manage.py makemigrations —— 自定义权限根本不会进数据库Group.permissions.add() 会静默失败或报 Permission matching query does not exist。立即学习“Python免费学习笔记深入”查权限对象from django.contrib.auth.models import Permission; perm Permission.objects.get(codenamepublish_post)加权限到组group.permissions.add(perm)视图中判断if request.user.has_perm(blog.publish_post):注意 app_label.codename 格式模板中用{% if perms.blog.publish_post %}...{% endif %}需确保 context_processors.auth 已启用为什么 permission_required 有时不生效permission_required 看似简单但失效往往不是装饰器写错了而是路径或参数没对齐。它默认重定向到 settings.LOGIN_URL如果用户已登录却跳转登录页大概率是权限字符串写错或者用户根本没被赋予对应权限包括没加 Group、没同步权限、拼写大小写不一致。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

更多文章