如何使用Django默认的Auth权限管理系统
作者:Alan 发布时间:2022-11-29 04:09:40
1.Django默认已经提供了认证系统Auth模块。
认证系统包含:
用户管理
权限
用户组
密码哈希系统
用户登录或内容显示的表单和视图
一个可插拔的后台系统 admin
Django默认用户的认证机制依赖Session机制,我们在项目中将引入JWT认证机制,将用户的身份凭据存放在Token中,然后对接Django的认证系统,帮助我们来实现:
用户的数据模型
用户密码的加密与验证
用户的权限系统
auth存在的位置 External Libraries\site-packages\django\contrib\..
其中包括auth模块和admin模块.
2.Django用户模型
Django认证系统中提供了用户模型类User保存用户的数据,模型保存位置:D:\anaconda\Lib\site-packages\django\contrib\auth\models.py
,默认的User包含以下常见的基本字段:
字段名 | 字段描述 |
---|---|
username | 必选。150个字符以内。 用户名可能包含字母数字,_ ,@ ,+ . 和- 个字符。 |
first_name | 可选(blank=True )。 少于等于30个字符。 |
last_name | 可选(blank=True )。 少于等于30个字符。 |
email | 可选(blank=True )。 邮箱地址。 |
password | 必选。 密码的哈希加密串。 (Django 不保存原始密码)。 原始密码可以无限长而且可以包含任意字符。 |
groups | 与Group 之间的多对多关系。 |
user_permissions | 与Permission 之间的多对多关系。 |
is_staff | 布尔值。 设置用户是否可以访问Admin 站点。 |
is_active | 布尔值。 指示用户的账号是否激活。 它不是用来控制用户是否能够登录,而是描述一种帐号的使用状态。 |
is_superuser | 是否是超级用户。超级用户具有所有权限。 |
last_login | 用户最后一次登录的时间。 |
date_joined | 账户创建的时间。 当账号创建时,默认设置为当前的date/time。 |
常用方法:
set_password
(raw_password)
设置用户的密码为给定的原始字符串,并负责密码的。 不会保存User
对象。当None
为raw_password
时,密码将设置为一个不可用的密码。
check_password
(raw_password)
如果给定的raw_password是用户的真实密码,则返回True,可以在校验用户密码时使用。
管理器方法:
管理器方法即可以通过User.objects.
进行调用的方法。
create_user
(username, email=None, password=None, **extra_fields)
创建、保存并返回一个User
对象。
create_superuser
(username, email, password, **extra_fields)
与create_user()
相同,但是设置is_staff
和is_superuser
为True
。
3.自定义User对象
因为系统默认自带的user对象很多属性和功能并不是我自己需要的,所以需要我们自己重新定义一个user对象.
第一步:创建一个user app
python manage.py startapp user
创建自定义user对象models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class user(AbstractUser):
# 声明自定义user对象
mobile=models.CharField(max_length=11,unique=True,verbose_name="手机号码")
avatar=models.ImageField(upload_to="avatar",verbose_name="用户头像")
class Mata:
db_table="user"
verbose_name="用户信息"
verbose_name_plural=verbose_name
第二步:配置相关信息
进入主app下面的setting
文件中
注册userapp
注册自定义模型
第三步:执行数据迁移
注意事项:如果是在第一次数据迁移之后,猜设置的AUTH_USER_MODEL自定义模型则会报错,解决方法如下:
先把现有的数据库导出备份,然后清掉数据库中所有的数据表。
把开发者创建的所有子应用下面的migrations目录下除了__init__.py以外的所有迁移文件,只要涉及到用户的,一律删除
把django.contrib.admin.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
把django.contrib.auth.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
把reversion.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
把xadmin.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
接下来,执行数据迁移,回顾第0步中的数据,以后如果要修改用户相关数据,不需要重复本次操作,直接数据迁移即可。
删除表
删除user.migrations
目录下除了__init__.py以外的所有迁移文件,只要涉及到用户的,一律删除
把django.contrib.admin.migrations
,django.contrib.auth.migrations
,reversion.migrations
,xadmin.migrations
目录下除了__init__.py以外的所有迁移文件,全部删除
* 执行数据迁移
在terminal中执行:
python manage.py makemigrations
python manage.py migrate
来源:https://blog.csdn.net/qq_35653657/article/details/128832687


猜你喜欢
- 本文实例讲述了Python基于list的append和pop方法实现堆栈与队列功能。分享给大家供大家参考,具体如下:#coding=utf8
- pandas中包含了DataFrame和Series数据类型,分别表示二维数据结构和一维数据结构。简单的可以理解为Series为excel表
- 先给大家介绍下python制作定时发送信息脚本,内容如下所示:文章中提到的菜单是右下角这个需求我们需要做到打开微信获取输入框焦点及输入思路1
- 从一个字符串开始在CODE上查看代码片派生到我的代码片 >>>time_str='2008-08-08
- 目录urllib库作用Urllib 库下的几种模块的基本使用一、urllib.request模块1.功能2.常用方法参数说明:总结urlli
- 简介工作中偶尔会出现一个查询数据的需求,那就是需要按天统计近一个月或其它一段时间内每天的所有记录或者分组数据,没有数据则自动补0。一般情况下
- 目录前期准备界面编写截图功能实现OCR实现内容显示总结前期准备在这个阶段主要准备整个小程序的结构,既然要实现ocr,那么输入就是一张图片,而
- Python中的闭包的概念, 在我看来, 就相当于在某个函数中又定义了一个或多个函数, 内层函数定义了具体的实现方式, 而外层返回的就是这个
- python字典怎么排序?定义一个字典类型mydict = {2: '小路', 3: '黎明', 1:
- 车牌识别在高速公路中有着广泛的应用,比如我们常见的电子收费(ETC)系统和交通违章车辆的检测,除此之外像小区或地下车库门禁也会用到,基本上凡
- python 统计代码行数简单实例送测的时候,发现需要统计代码行数于是写了个小程序统计自己的代码的行数。#calclate_co
- 需求最近接到一个任务,要把一批文件中的十几万条JSON格式数据写入到Oracle数据库中,Oracle是企业级别的数据库向来以高性能著称,所
- 问题在使用MySQL数据库的时候,经常会遇到这么一个问题,就是“Can not connect to MySQL server. Too m
- //香水坏坏 AT 06-07-25 //郁闷的事情总是接连不断,无形的压力来自内心的恐惧 大家在用.net进行数据操作
- 前言开发某款app时,产品给的UI原型图上有个分为三段的圆环图,本来以为使用echarts应该会很好做的,主要考虑移动端echarts的兼容
- mysql存储引擎:MySQL服务器采用了模块化风格,各部分之间保持相对独立,尤其体现在存储架构上。存储引擎负责管理数据存储,以及MySQL
- 虽然在win2003配置PHP有点非主流,但你还是要会怎么弄。你也可以将本文的虚拟机看成是服务器,宿主机看成是客户端。不像Linux系统,由
- 本文实例讲述了PHP删除数组中指定值的元素。分享给大家供大家参考,具体如下:测试数组如下://这是一个测试数组$testArr = arra
- models.py:from django.db import models # 出版社class Publisher(models.Mod
- 本文实例讲述了Python简单I/O操作。分享给大家供大家参考,具体如下:文件:poem = '''hellowor