什么是auth模块
auth模块是django自带的与用户相关的功能模块
我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。
Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。
auth模块中常用方法
auth模块是django用户相关的自带的功能模块,相关的信息记录于auth_user表。
如何创建超级用户
# 工具栏中Tools——Run manager.py Task——输入:
> createsuperuser
> 此处输入用管理员用户名(eg:admin)
> 此处输入邮箱(邮箱可以不填,直接跳过)
> 输入账户密码
> 确认账户密码
# 创建完成之后,auth_user表中就有超级管理员的记录(表中的密码是加密后的)
创建完成之后,可以在浏览器中登陆:
http://127.0.0.1:8000/admin
登陆之后,可以在浏览器中对所有的模型表进行操作。
auth方法大全
1、创建用户
# 创建普通用户
User.objects.create() # 密码是明文,django校验时是和密文进行校验,因此此方法一般不使用
User.objects.createuser() # 密码是密文
# 创建超级管理员
User.objects.createsuperuser() # 邮箱要给数据 通过创建逻辑代码的方式创建超级管理员,需要填写邮箱
# eg:
User.objects.createuser(username=xxx, password=xxx)
User.objects.createsuperuser(username=xxx, password=xxx, [email protected])
2、校验用户名和密码
res = auth.authenticate(username=username,password=password) # 用户名和密码两个一个都不能少
# 该方法当用户名和密码正确的时候返回的用户对象 不正确返回None
3、保存用户的登录状态
只要执行了这一句话,之后在任意可以获取到request对象的地方,都可以通过request.user
获取到当前登录的用户对象。
如果没有登录,request.user
获取到的是匿名用户(AnonymousUser
)。
auth.login(request,user_obj) # 这一句执行之后 request.user获取当前登录的用户对象
# 此条语句等价于操作django_session中的表
4、判断用户是否登录,以及获取当前登录用户对象
request.user.is_authenticated() # 判断用户是否登录 返回True或False
request.user # 登录用户对象
5、登录校验装饰器
装饰在需要登录后可以操作的功能,例如转账,查看个人信息等功能,需要用户先进行登录。
# 先导入装饰器模块
from django.contrib.auth.decorators import login_required
# 局部配置
@login_required(login_url='/login/') # 如果没有用户未登录,跳转到指定的url
def xxx(request):
return HttpResponse('xxx页面')
# 全局配置
# 配置文件(settings.py)中写以下代码
LOGIN_URL = '/login/'
@login_required
def xxx(request):
return HttpResponse('xxx页面')
# 如果两个都设置了 那么优先执行局部配置
6、修改密码
# 校验密码
is_right = request.user.check_password(old_password) # 校验原密码是否正确,返回值返回的是bool值
# 修改密码
request.user.set_password(new_password) # 设置密码
request.user.save() # 设置完密码后,一定要保存
7、注销登录
注销功能记得也要加登录装饰器,因为只有登录后才可以注销
auth.logout(request) # 注销登录
# 使用auth模块注销,django会自动操作session表,这里的注销功能其实就是操作的session表
如何扩展auth_user表
在扩展表之前需要是一个全新的库,已使用并已经创建auth_user表就不能再扩展了
利用一对一表关系(了解)
利用类的继承
from django.contrib.auth.models import User
# 导入User类,点击进去,发现继承的是AbstractUser这个类
因此,我们也可以自定义类,并继承AbstractUser
# 1 类的继承
from django.contrib.auth.models import AbstractUser
# Create your models here.
class Userinfo(AbstractUser):
phone = models.BigIntegerField()
avatar = models.FileField()
# 扩展的字段 尽量不要与原先表中的字段冲突
# 2 配置文件
AUTH_USER_MODEL = '应用名.表名'
"""
django就会将userinfo表来替换auth_user表
并且之前auth模块所有的功能不变 参照的也是userinfo表
"""
数据库迁移命令老是报错,无法解决,最快的方式就是重新建一个库,用新库,或者把应用名下的migrations目录下的所有文件删除,只保留
__init__.py
,然后重新执行数据库迁移命令。
原文地址:https://www.cnblogs.com/cnhyk/p/12274332.html
时间: 2024-11-08 15:11:10