原文地址:https://docs.djangoproject.com/en/3.0/topics/auth/
Django中的用户权限验证
Django本身自带了一个权限验证系统,它可以用来处理用户账户、组的权限认证和以cookie-based为基础的用户会话问题。这部分的文档解释了该系统的默认实现是如何做到开箱即用(work out of box)的,也会告诉你如何对它进行扩展与定制,以达到让他适合你项目需求的目标。
概述
Django的权限认证系统同时处理身份的验证和授权的问题。简单来说,身份验证用来验证用户的身份(他是谁),然后授权决定一个通过身份验证的用户能够做什么(他能做什么),而这里使用到的身份验证这个术语指代的便是这两个东西
认证系统包括:
-
用户账户
-
权限认证:用一个二进制标志来指示一个用户是否能够执行某个特定任务
-
组:将标签和权限许可用于多个用户以实现方便管理的一个方法
-
一个可配置的密码散列系统
-
用于登陆用户或内容进行限制的表单或视图工具
-
可拔插的后端系统
Django的权限验证系统的设计目标是有非常高的通用性,而不是提供web权限验证系统中常见的一些特性。因为这些常见的问题的解决方案已经被一些第三方库实现。
- 密码强度检查
-
登陆请求超量限制
-
针对第三方的权限验证(如OAuth)
- 对象级权限
安装
在Django中,权限验证系统被绑定为django.contrib模块,通过import django.contrib.auth引入,在默认情况下,该系统的所需要的配置已经由django-admin startproject setting.py生成的setting.py集成,并在你的INSTALLED_APPS中对两个事项进行了设置:
'django.contrib.auth'包含身份验证框架的核心,以及它的默认模型
-
'django.contrib.contenttypes'是Django的内容类型系统,它可以将你的模型与权限相关联
并且这些事项在你的中间件中也有设置:
-
SessionMiddleware管理跨请求的会话
-
AuthernticationMiddleware使用会话将用户与请求关联起来
有了这些设置,运行manage.py migrate这一命令为与auth相关的模型创建必要的数据库表,并为安装的应用程序中定义的任何模型创建权限