Django之auth认证模块
1. 什么是auth模块
Auth模块是Django自带的用户认证模块:
我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。
Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。
2. 生成auth物理表
1. 配置setting.py使用mysql存储数据
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'yangjianbo', #数据库需要提前建好
'USER': 'root',
'PASSWORD': '123.com',
'HOST': '172.16.1.209',
'PORT': '3306',
}
}
2. Django使用pymysql模块连接mysql数据库
3. 在与settings.py同级目录下的__init__.py中引入模块,进行配置
import pymysql pymysql.install_as_MySQLdb()
4. 执行数据迁移
py manage.py migrate
5. 执行命令以后,会在mysql数据库中,多出几个表

3. 创建django-admin账户
1. 创建超级管理员
不能在表中直接创建,由于密码是需要加密的,而表中创建则不会通过auth模块加密,在使用的时候,密码比对会发生错误
python manage.py createsuperuser

2. 数据库中的信息

可以看到password这个字段会被自动加密
4. 登录使用admin账户
1. 注意事项:
1. 普通用户注册只能通过逻辑来编写
2. 不能自己创建,因为密码加密无法实现
3. 可以通过web页面登录管理员账户,添加普通用户
2. 普通用户注册逻辑
1. 不能通过user.objects.create()来实现,创建的用户密码在数据库中显示为明文
2. 通过create_user方法来实现
5. auth模块的方法
1. 导入auth模块以及导入User表
# 导入auth模块 from django.contrib import auth # 导入auth-user表 from django.contrib.auth.models import User
2. auth.authenticate校验用户是否已经存在
通过authenticate方法
校验用户成功后,返回的是一个封装好的用户对象
校验错误则返回None

3. auth.login
用户登录成功之后,返回给客户端登录的凭证或者说是令牌、随机字符串,则不需要我们去操作diango_session表,会自动创建session
def login_func(request):
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
# 1。通过auth模块来校验加密后的密码
user_obj = auth.authenticate(request, username=username, password=password)
if user_obj:
# 2.用户登录成功之后(返回给客户端登录的凭证或者说是令牌、随机字符串)
auth.login(request, user_obj) # 自动操作django_session表
return render(request, 'loginPage.html')
4. request.user
1. request.user 直接获取当前登录的用户对象数据
2. request.user.is_authenticated 判断当前对象,是否已登录
3. request.user.check_password(原密码) 校验原密码是否正确
4. request.user.set_password(新密码) 修改密码
5. request.user.save() 保存修改
5. auth.logout(request)
退出登录的本质就是删除session表中相关的数据

浙公网安备 33010602011771号