Django自定义用户2018-09-19

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的初步学习,我们已经对后台的基本流程以及django的运作有了一定的了解,但是这还不足够,dja...
    coder_ben阅读 3,861评论 8 34
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • http://docs.openstack.org/developer/horizon/ {官网} 首先我们想...
    Programmer客栈阅读 4,410评论 3 62
  • 今天上午听了广东中山纪念中学王家文老师的利用素材开启学生心智:利用漫画配文章、对联、诗词、墙报、说教等。 王老师又...
    孙国杨阅读 309评论 0 6
  • 我们在年少的时候那么躁动不安,去尝试一些自己不能承受的刺激。高估了自己的承受能力,让自己如此的狼狈不堪。
    见素抱朴守一阅读 168评论 0 0