django auth认证系统流程

27 篇文章 0 订阅
27 篇文章 0 订阅
#auth认证系统的主要组成部分
https://docs.djangoproject.com/en/1.11/ref/contrib/auth/


1,用户 

2,3,权限



## 自定义权限认证管理 
https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#custom-permissions

### 第一步  自定义权限

    需要在定义模型中 使用 元 选项

```
    class Task(models.Model):
    ...
    class Meta:
        permissions = (
            ("view_task", "Can see available tasks"),
            ("change_task_status", "Can change the status of tasks"),
            ("close_task", "Can remove a task by setting its status as closed"),
        )

```

### 第二步,在后台中实现 对管理员和组的管理

    管理员添加
        from django.contrib.auth.models import User
        创建用户
        User.objects.create_user()
        创建超级用户
        User.objects.create_superuser(用户名,电子邮件,密码,** extra_fields)
        https://docs.djangoproject.com/en/1.11/ref/contrib/auth/#django.contrib.auth.models.UserManager.create_user


        # 判断是否需要为用户分配组 
        gs = request.POST.getlist('gs',None)
        if gs:
            # 给当前用户分组
            ob.groups.set(gs)
            ob.save()


    组添加

        # 创建组
        g = Group(name=request.POST['name'])
        g.save()

        #给组添加权限
        https://docs.djangoproject.com/en/1.11/ref/contrib/auth/#group-model

        # 获取选择的所有权限
        prms  = request.POST.getlist('prms',None)
        # 判断是否需要给组添加权限
        if prms:
            # 给组分配权限
            g.permissions.set(prms)
            g.save()
        

    权限获取
        # 读取所有权限信息
        # Permission.objects.all()
        # 读取所有权限信息,并排除以Can开头的系统默认生成权限
        perms = Permission.objects.exclude(name__istartswith='Can')


    



### 第三部,进行验证,验证是否登录,验证是否具有权限
    login()  logout()
    https://docs.djangoproject.com/en/1.11/topics/auth/default/#how-to-log-a-user-in


    检查用户是否具有特定权限是相对常见的任务。出于这个原因,Django为这种情况提供了一个快捷方式: permission_required()装饰器:
    https://docs.djangoproject.com/en/1.11/topics/auth/default/#the-permission-required-decorator

    使用中间件来验证用户是否登陆

    使用 装饰器 来验证是否具有操作权限



### 第四步,在html模板中判断当前登录的用户是否能查看

    在模板中操作权限
    https://docs.djangoproject.com/en/1.11/topics/auth/default/#permissions


     {{ perms }}




     <ul>
         {% if request.user.is_superuser or 'demo.show_users' in perms %}
             <li>用户管理</li>
         {% endif %}

         {% if request.user.is_superuser or 'demo.show_types' in perms %}
             <li>分类管理</li>
         {% endif %}

         {% if request.user.is_superuser or 'demo.show_goods' in perms %}
             <li>商品管理</li>
         {% endif %}
     </ul>



###其他操作

    # 获取当前会话的用户对象
        obj = get_user(request)


    # 获取当前用户拥有的所有权限
        pms = obj.get_all_permissions()


    # # 检查当前用户是否具有 perm 权限
        # res = obj.has_perm('demo.add_types')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值