美文网首页
Django自定义用户2018-09-19

Django自定义用户2018-09-19

作者: LPP27149 | 来源:发表于2018-09-19 20:48 被阅读0次

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,会在验证失败时跳转验证失败页面

相关文章

网友评论

      本文标题:Django自定义用户2018-09-19

      本文链接:https://www.haomeiwen.com/subject/mgrwnftx.html