美文网首页
8.3 django 权限和分组

8.3 django 权限和分组

作者: yungege | 来源:发表于2019-08-17 20:57 被阅读0次

权限和分组

登录、注销和登录限制:

登录

在使用authenticate进行验证后,如果验证通过了。那么会返回一个user对象,拿到user对象后,可以使用django.contrib.auth.login进行登录。示例代码如下:

user = authenticate(username=username, password=password)
if user is not None:
    if user.is_active:
        login(request, user)

注销:

注销,或者说退出登录。我们可以通过django.contrib.auth.logout来实现。他会清理掉这个用户的session数据。

登录限制:

有时候,某个视图函数是需要经过登录后才能访问的。那么我们可以通过django.contrib.auth.decorators.login_required装饰器来实现。示例代码如下:

from django.contrib.auth.decorators import login_required

# 在验证失败后,会跳转到/accounts/login/这个url页面
@login_required(login_url='/accounts/login/')
def my_view(request):
    pass

权限:

Django中内置了权限的功能。他的权限都是针对表或者说是模型级别的。比如对某个模型上的数据是否可以进行增删改查操作。他不能针对数据级别的,比如对某个表中的某条数据能否进行增删改查操作(如果要实现数据级别的,考虑使用django-guardian)。创建完一个模型后,针对这个模型默认就有三种权限,分别是增/删/改/。可以在执行完migrate命令后,查看数据库中的auth_permission表中的所有权限。

其中的codename表示的是权限的名字。name表示的是这个权限的作用。

通过定义模型添加权限:

如果我们想要增加新的权限,比如查看某个模型的权限,那么我们可以在定义模型的时候在Meta中定义好。示例代码如下:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(get_user_model(),on_delete=models.CASCADE)

    class Meta:
        permissions = (
            ('view_article','can view article'),
        )

通过代码添加权限:

权限都是django.contrib.auth.Permission的实例。这个模型包含三个字段,namecodename以及content_type,其中的content_type表示这个permission是属于哪个app下的哪个models。用Permission模型创建权限的代码如下:

from django.contrib.auth.models import Permission,ContentType
from .models import Article
content_type = ContentType.objects.get_for_model(Article)
permission = Permission.objects.create(name='可以编辑的权限',codename='edit_article',content_type=content_type)

用户与权限管理:

权限本身只是一个数据,必须和用户进行绑定,才能起到作用。User模型和权限之间的管理,可以通过以下几种方式来管理:

  1. myuser.user_permissions.set(permission_list):直接给定一个权限的列表。
  2. myuser.user_permissions.add(permission,permission,...):一个个添加权限。
  3. myuser.user_permissions.remove(permission,permission,...):一个个删除权限。
  4. myuser.user_permissions.clear():清除权限。
  5. myuser.has_perm('<app_name>.<codename>'):判断是否拥有某个权限。权限参数是一个字符串,格式是app_name.codename
  6. myuser.get_all_permissons():获取所有的权限。

权限限定装饰器:

使用django.contrib.auth.decorators.permission_required可以非常方便的检查用户是否拥有这个权限,如果拥有,那么就可以进入到指定的视图函数中,如果不拥有,那么就会报一个400错误。示例代码如下:

from django.contrib.auth.decorators import permission_required

@permission_required('front.view_article')
def my_view(request):
    ...

分组:

权限有很多,一个模型就有最少三个权限,如果一些用户拥有相同的权限,那么每次都要重复添加。这时候分组就可以帮我们解决这种问题了,我们可以把一些权限归类,然后添加到某个分组中,之后再把和把需要赋予这些权限的用户添加到这个分组中,就比较好管理了。分组我们使用的是django.contrib.auth.models.Group模型, 每个用户组拥有idname两个字段,该模型在数据库被映射为auth_group数据表。

分组操作:

  1. Group.object.create(group_name):创建分组。
  2. group.permissions:某个分组上的权限。多对多的关系。
    • group.permissions.add:添加权限。
    • group.permissions.remove:移除权限。
    • group.permissions.clear:清除所有权限。
    • user.get_group_permissions():获取用户所属组的权限。
  3. user.groups:某个用户上的所有分组。多对多的关系。

在模板中使用权限:

settings.TEMPLATES.OPTIONS.context_processors下,因为添加了django.contrib.auth.context_processors.auth上下文处理器,因此在模板中可以直接通过perms来获取用户的所有权限。示例代码如下:

相关文章

  • 8.3 django 权限和分组

    权限和分组 登录、注销和登录限制: 登录 在使用authenticate进行验证后,如果验证通过了。那么会返回一个...

  • django项目--权限分组管理

    权限分组管理 一、权限分组列表 1. 接口设计 接口说明 返回结果html 2. 后端代码 视图# 在myadmi...

  • 8.1 django 验证和授权概述

    验证和授权概述 Django有一个内置的授权系统。他用来处理用户、分组、权限以及基于cookie的会话系统。Dja...

  • 最浅显易懂的Django系列教程(45)-概述

    验证和授权概述 Django有一个内置的授权系统。他用来处理用户、分组、权限以及基于cookie的会话系统。Dja...

  • Django 二

    目录 1.Django模板冲突问题 2.Django路由分发 3.有名分组和无名分组 4.Django创建app流...

  • Django中app分组

    django中app分组 一.django路由系统app进行分组 1.创建app 使用pycharm创建djang...

  • 【实体类】权限分组

    字段 分组id 分组名 分组描述名 分组描述信息 权限list 懒

  • 【实体类】用户分组

    字段 分组名 分组id 分组描述名 分组简介 权限(权限实体类对象的set)多对多 用户的list 一对多

  • android6.0动态权限分配

    最近在做权限优化的工作内容,所以来做一下记录和总结安卓有三种权限分组:普通权限、危险权限和特殊权限普通权限在安装后...

  • Django权限管理

    Django权限机制概述 权限机制能够约束用户行为,控制页面的显示内容,也能使API更加安全和灵活;用好权限机制,...

网友评论

      本文标题:8.3 django 权限和分组

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