1. 自定义用模型
- ① 在settings中添加声明
# 声明自定义模型为MyUser
AUTH_USER_MODEL = 'app.MyUser'
- ② 在models中继承
AbstractUser
类, 自定义用户模型
class MyUser(AbstractUser):
"""
自定义django自带的模型
"""
is_delete = models.BooleanField(default=0, verbose_name='是否删除')
class Meta:
permissions = (
# (权限名, 描述)
('change_myuser_username', '修改用户名'),
('change_myuser_password', '修改密码'),
)
- ③ 在views中构造方法
add_user_permission(request)
给指定用户添加指定权限
def add_user_permission(request):
if request.method == 'GET':
# 给admin用户添加修改用户名的权限
user = MyUser.objects.filter(username='admin').first()
per = Permission.objects.filter(codename='change_myuser_username').first()
# 添加权限
user.user_permissions.add(per)
# 删除权限
# user.user_permissions.add(per)
# 清空权限
# user.user_permissions.clear()
return HttpResponse('添加用户权限成功')
- ④ 在views中构造方法
add_group_permission(request)
给指定组添加指定权限
def add_group_permission(request):
if request.method == 'GET':
# 创建审核组, 并分配查看, 和编辑
group = Group.objects.filter(name='审核组').first()
if group:
per_list = [
'change_myuser_username',
'change_myuser_password',
'change_myuser',
'delete_myuser'
]
pers = Permission.objects.filter(codename__in=per_list)
for per in pers:
# 添加组和权限之间的关系
group.permissions.add(per)
# 添加组和权限之间的关系
# group.permissions.remove(per)
return HttpResponse(0)
else:
Group.objects.create(name='审核组')
return HttpResponse('审核组不存在, 请先创建')
- ⑤ 在views中构造方法
add_user_group(request)
给指定用户分配组
def add_user_group(request):
if request.method == 'GET':
user = MyUser.objects.filter(username='admin').first()
group = Group.objects.filter(name='审核组').first()
# 给admin用户分配组
user.groups.add(group)
return HttpResponse('分配成功')
- ⑥ 在views中构造方法
user_permission(request)
查看指定用户的所有权限
def user_permission(request):
if request.method == 'GET':
user = MyUser.objects.filter(username='admin').first()
# 1. 直接从用户和权限关联表查
p1 = user.user_permissions.all().values('codename')
# 2. 从组和权限关联表查询
p2 = user.groups.first().permissions.all().values('codename')
# 获取user的所有权限
user.get_all_permissions()
# 获取user所在组的权限
user.get_group_permissions()
return HttpResponse(p1)
- ⑦ 在views中构造被
permission_required('app.changge_myuser_username')
修改用户名权限修饰器修饰的方法, 该方法需要有changge_myuser_username
权限的用户才能访问
@permission_required('app.change_myuser_username')
def index(request):
if request.method == 'GET':
return render(request, 'index.html')
tips:在settings中添加LOGIN_URL= 验证失败URL
,会在验证失败时跳转验证失败页面