网站建设费支付请示,西昌手机网站建设成都彩钢顶防水,泰安市景区建设网站,做营销的网站1. Django默认用户模型类
#xff08;1#xff09;Django认证系统中提供了用户模型类User保存用户的数据。 User对象是认证系统的核心。
#xff08;2#xff09;Django认证系统用户模型类位置
django.contrib.auth.models.User#xff08;3#xff09;父类AbstractUs…1. Django默认用户模型类
1Django认证系统中提供了用户模型类User保存用户的数据。 User对象是认证系统的核心。
2Django认证系统用户模型类位置
django.contrib.auth.models.User3父类AbstractUser介绍 一旦一个模型里面的Meta里面abstract True那这个模型就是抽象模型。抽象模型有啥用呢就是用来被继承。我们在迁移的时候他不会把这个模型也去映射表。可以理解为就是一个模板其他模型把他继承之后就能共用里面的字段比如AbstractUser里面的username、first_name、last_name、email等等。
其中 USERNAME_FIELD 就是指定到底是哪个字段作为django默认的凭证。REQUIRED_FIELDS指定的字段和你username是否一对一匹配的上。
User对象基本属性创建用户(注册用户)必选username、password创建用户(注册用户)可选email、first_name、last_name、last_login、date_joined、is_active 、is_staff、is_superuser判断用户是否通过认证(是否登录)is_authenticated
创建用户(注册用户)的方法
user User.objects.create_user(username, email, password, **extra_fields)
用户认证(用户登录)的方法
from django.contrib.auth import authenticate
user authenticate(usernameusername, passwordpassword, **kwargs)
处理密码的方法
设置密码set_password(raw_password)
校验密码check_password(raw_password) 2. 自定义用户模型类 思考为什么要自定义用户模型类
如今几乎所有的web应用都需要用户提供手机号码单默认的用户模型类中没有mobile字段随着业务的发展未来很可能需要自定义用户模型django强烈推荐在开始一个项目时设置一个自定义的用户模型如何自定义用户模型类继承自AbstractUser最简单可行的方法详情见官方文档 。新增mobile 字段。
在users.models.py 模块中定义模型如下
在通过 createsuperuser 管理命令创建用户时将提示输入mobile字段
REQUIRED_FIELDS [mobile]
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.core.exceptions import ValidationErrordef validate_mobile(value):if not re.match(r1[3-9]\d{9}, value): raise ValidationError(手机号码格式不正确)class User(AbstractUser): Custom user model.Add mobile field to Django user model # 添加一个mobile字段mobile models.CharField(手机号码, max_length11, uniqueTrue, help_text手机号码, nullTrue, blankTrue,error_messages{unique: 手机号码已注册}, validators[validate_mobile])# 如果希望用email作为用户名# USERNAME_FIELD emaildef __str__(self): return self.usernameclass Meta:db_table tb_user # 表 名verbose_name user # 站点显示名verbose_name_plural users # 复数显示REQUIRED_FIELDS [mobile] # 在通过 createsuperuser 管理命令创建用户时将提示输入mobile字段 模型写好之后是不是要迁移但是现在不能去迁移为啥因为现在去迁移会跟我们本身自带的User模型造成冲突。所以我们要去认证只能有一个用户模型。往下看第四大点。 知识要点 1. Django自带用户认证系统核心就是User对象并封装了一系列可用的方法和属性。
2. Django用户认证系统包含了一系列对用户的操作比如模型类认证权限分组密码处理等。
3. Django用户认证系统中的用户模型类可以自定义最简单的方法是继承自AbstractUser。
4. 更多Django中的自定义验证见官方文档 3. 迁移用户模型类
1指定用户模型类
Django是通过配置项AUTH_USER_MODEL 来确定项目中到底使用哪个用户模型所以我们需要修改配置指定我们的自定义的用户模型。
配置规则
AUTH_USER_MODEL 应用名.模型类名
注意应用要在INSTALLED_APPS 中注册且一定要在第一次迁移之前要设置好此项
# 指定本项目用户模型类 settings.py 设置
AUTH_USER_MODEL users.User
2迁移用户模型类 创建迁移文件
python manage.py makemigrations 执行迁移文件
python manage.py migrate 3 知识要点
1. 用户认证系统中的用户模型类是通过全局配置项AUTH_USER_MODEL 决定的。
2. 如果迁移自定义用户模型类必须先配置AUTH_USER_MODEL 。
3. 注意在迁移之前运行服务会报错因为默认项目依赖用户模型 4.验证自定义User模型中定义的一些字段
1REQUIRED_FIELDS
在通过 createsuperuser 管理命令创建用户时将提示输入mobile字段
REQUIRED_FIELDS [mobile] 2max_length11 3validators[validate_mobile] 校验器可以列表嵌套多个校验函数 4 判断用户是否通过认证is_authenticated 进入shell之前我们先安装ipython
pip install ipython 密码是加密的这个就不说啦。就是给大家看一哈。 is_authenticated 5创建用户create和create_user的区别
上面我通过 python manage.py createsuperuser 创建超级管理员的时候然后我在shell中查看daxia用户的密码发现是加密。 但是我通过 User.objects.create(usernametest,password123456)去创建用户的时候发现密码却是明文。TODO:后面去校验的时候永远不会通过 此时我用User.objects.create_user(username健健, password123456)去创建用户的时候发现密码确实加密的。 大家应该发现区别了吧~
6authenticate用户认证(用户登录)的方法
验证通过的话会返回这个用户
from django.contrib.auth import authenticate
user authenticate(usernameusername, passwordpassword, **kwargs) 验证返回不通过的话就不会返回 7check_password检查密码 8set_password设置密码
因为上面我们create创建的用户的密码是明文的那这个时候我们把他修改一下。
密码是不是加密啦。
注意对象.set_password(raw_password)后记得 对象.save()保存一下。