Django自定义权限及用户分组

登录、注销和登录限制:

登录

在使用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的实例。这个模型包含三个字段,name、codename以及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模型和权限之间的管理,可以通过以下几种方式来管理:

  • myuser.user_permissions.set(permission_list):直接给定一个权限的列表。
  • myuser.user_permissions.add(permission,permission,...):一个个添加权限。
  • myuser.user_permissions.remove(permission,permission,...):一个个删除权限。
  • myuser.user_permissions.clear():清除权限。
  • myuser.has_perm('<app_name>.<codename>'):判断是否拥有某个权限。权限参数是一个字符串,格式是app_name.codename。
  • 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模型, 每个用户组拥有id和name两个字段,该模型在数据库被映射为auth_group数据表。

分组操作:

Group.object.create(group_name):创建分组。

group.permissions:某个分组上的权限。多对多的关系。

  • group.permissions.add:添加权限。
  • group.permissions.remove:移除权限。
  • group.permissions.clear:清除所有权限。
  • user.get_group_permissions():获取用户所属组的权限。

user.groups:某个用户上的所有分组。多对多的关系。

在模板中使用权限:

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

{% if perms.front.add_article %}
    &lt;a href='/article/add/'&gt;添加文章&lt;/a&gt;
{% endif %}

以上就是Django登录权限及分组模板使用权限的详细内容,更多关于Django权限分组的资料请关注我们其它相关文章!

(0)

相关推荐

  • Django自定义User模型、认证、权限控制的操作

    Django自带强大的User系统,为我们提供用户认证.权限.组等一系列功能,可以快速建立一个完整的后台功能. 但User模型并不能满足我们的需求,例如自带的User表中没有手机号码,而且对于国人来说表中的first_name和last_name并没有什么卵用,对于实际生产中灵活的用户表来说重写User模型是非常有必要的. 扩展User模型 扩展User模型有许多的方法: 1.Proxy继承: 代理继承,此方法只能够继承User本身拥有的字段,并不能够添加和删改,不会影响表中原有的结构,但是可以

  • django自带的权限管理Permission用法说明

    前言 一些公司内部的CMS系统存在某些内容让指定的用户有权限访问,这时候可以用django自带的权限管理进行限制,比较方便. 缺点:django自带的权限是针对model(模型)的,不能针对单条数据,要针对单条数据需要额外的操作. 默认的权限(add, change, delete, view) django针对每个模型,生成了四个默认的权限(add, change, delete, view).例如,我有一个model叫Log,那么这四个默认权限在数据库的存储格式为: 表auth_permis

  • Django权限控制的使用

    自己搭建后台网站,需求:实现类似django Admin站点对每一张表的增删改查权限控制. 实现步骤: 1.权限控制Django框架已自带,共6张表,User表,Group表,UserGroup表,Permission表,GroupPermission表,UserPermission表,一般情况下,使用默认即可. 2.若User表自定义,需继承Django自带AbstractUser类,Group表同理. 3.创建类PermissionControl继承BasePermission,重写has_

  • Django 权限管理(permissions)与用户组(group)详解

    如果你只是利用Django开发个博客,大部分用户只是阅读你的文章而已,你可能根本用不到本节内容.但是如果你想开发一个内容管理系统,或用户管理系统,你必需对用户的权限进行管理和控制.Django自带的权限机制(permissions)与用户组(group)可以让我们很方便地对用户权限进行管理.小编我今天就尝试以浅显的语言来讲解下如何使用Django自带的权限管理机制. 什么是权限? 权限是能够约束用户行为和控制页面显示内容的一种机制.一个完整的权限应该包含3个要素: 用户,对象和权限,即什么用户对

  • 对Django中的权限和分组管理实例讲解

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

  • Django权限设置及验证方式

    当创建一个Models, 在同步到数据库里,django默认设置了三个权限 ,就是 add, change, delete权限.但是往往有时候,根本不够用,此时我们可以自己写一个脚本,来进行权限的设置. 根据DJango官方文档解释,权限都是与models有关系的,此时.如果想设置一个view,对于有权限的用户进行放行,对于无权限的用户进行限制.那么我们就可以着手来写这个需求. 验证权限的方法一般有两种,一种是用@permission_required来进行验证,第二中是用user.has_pe

  • Django自定义权限及用户分组

    登录.注销和登录限制: 登录 在使用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 自定义权限管理系统详解(通过中间件认证)

    1. 创建工程文件, 修改setting.py文件 django-admin.py startproject project_name 特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-admin.py 试试 setting.py 最终的配置文件 import os import sys # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR =

  • django认证系统实现自定义权限管理的方法

    本文记录使用django自带的认证系统实现自定义的权限管理系统,包含组权限.用户权限等实现. 0x01. django认证系统 django自带的认证系统能够很好的实现如登录.登出.创建用户.创建超级用户.修改密码等复杂操作,并且实现了用户组.组权限.用户权限等复杂结构,使用自带的认证系统就能帮助我们实现自定义的权限系统达到权限控制的目的. 0x02. 认证系统User对象 User对象顾名思义即为表示用户的对象,里面的属性包括: username password email first_na

  • Django自定义用户登录认证示例代码

    前言 有时候 Django 自带的用户登录认证不能满足我们的需求,比如我不想要用户名+密码登录,我想手机号+验证码登录,这样就需要我们去修改 Django 自带的认证了. Django 默认使用用户认证的是ModelBackend,这个类也就是我们要下手的地方,ModelBackend里面有一个authenticate的方法,这个方法就是登录时对用户认证的方法.我们要改的就是这个方法. 先看看原码理解一下认证逻辑: 第15-16行先获取认证用的用户名字段,默认是username,如果在Userm

  • Django自定义用户表+自定义admin后台中的字段实例

    1.自定义用户表 注意事项 必须在settings中配置AUTH_USER_MODEL这个字段 # 覆盖默认的用户模型,使用自定义用户模型 # 语 法:'app的名称.自定义用户模型的名称' AUTH_USER_MODEL = 'admi.UserModel' 2.在models文件中编写UserModel类 from django.db import models from django.contrib.auth.models import AbstractUser # Django框架将cr

  • Django自定义全局403、404、500错误页面的示例代码

    自定义模板 403 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>403-禁止访问</title> </head> <body> HTTP 403 - 禁止访问 </body> </html> 404 <!DOCTYPE html> <h

  • thinkphp自定义权限管理之名称判断方法

    权限管理,就是给不同的用户分配不同的权限.当用户登录或者操作时候进行判断,来阻止用户进行权限以外的操作.本次讲的是当用户登录一刻,只显示权限开启的内容. 一.建立数据库. 1.权限表funcla.来存储录入所有权限,也是避免因权限名称修改了,权限失效的问题. 2.管理员表admin.主要存储管理员用户名等信息. 3.管理员对应权限表funadmin.主要存储已开启的管理员id与权限id. 二.输出权限列表. 1.通过管理员列表进入权限分配. 2.权限分配列表. 关于权限分配列表,因为权限板块的不

  • IIS6.0的默认权限和用户权限设置小结

    NTFS 权限 目录 用户\组 权限 %windir%\help\iishelp\common Administrators 完全控制 %windir%\help\iishelp\common System 完全控制 %windir%\help\iishelp\common IIS_WPG 读取.执行 %windir%\help\iishelp\common Users(请参见"注意 1".) 读取.执行 %windir%\IIS Temporary Compressed Files

  • 浅谈Django自定义模板标签template_tags的用处

    自定义模板标签,过滤器.英文翻译是Customtemplatetagsandfilters.customfilter自定义过滤器今天不在我的记录范围之内,以后用到再看官方文档也不迟. **问题1:**customtemplatetags到底长啥样? customtemplatetags-github Manytemplatetagstakeanumberofarguments–stringsortemplatevariables–andreturnaresultafterdoingsomepro

随机推荐