第十一篇:auth模块

什么是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,然后重新执行数据库迁移命令。

你可能感兴趣的:(第十一篇:auth模块)