auth模块

-简介

auth模块可以用来快速实现跟用户相关的登录、注册、校验、修改密码、注销、验证登录等等功能

且一般使用auth模块时使用全套

在执行数据库迁移时,会创建一张auth_user表,用于管理用户信息,该表中有一字段is_superuser,用于表明是否该用户是超级用户

# 命令行创建超级用户
python manage.py createsuperuser 

-方法总结

导入:

from django.contrib.auth.models import User
from django.contrib import auth

--1.注册

# 将注册数据写入auth_user表中

# 写入数据
# User.objects.create(username=username, password=password) # 不用create,因为密码是明文保存的
# 写入数据用create_user方法,这样密码才是密文存储
User.objects.create_user(username=username, password=password)

# 了解:创建超级用户      使用下行代码创建超级用户 邮箱必填 而使用命令行不必
# User.objects.create_superuser(username=username, email='666@qq.com', password=password)

--2.登录校验

user_obj = auth.authenticate(request, username=username, password=password)
"""
auth.authenticate()括号内必须传入用户名和密码两个,且自动查找auth_user标签并比对
密码比对是用加密后的密码比对
auth.authenticate()校验成功后返回一个校验数据对象   用户不存在返回None
user_obj.username   weer
user_obj.password   pbkdf2_sha256$260000$YQglDzRyxzYJStsWYDERnQ
"""

--3.保存用户状态

auth.login(request, user_obj)   # 类似于request.session[key] = use_obj
# 好处:可以在任何地方通过request.user获取当前登录用户对象!!!

--4.判断是否登录

request.user.is_authenticated      结果为布尔值

--5.获取当前登录对象

user_obj = request.user

--6.校验是否登录装饰器

	库的导入:from django.contrib.auth.decorators import login_required
	全局配置:LOGIN_URL = '/login/'
		      @login_required     # 全局配置
	局部配置:
		@login_required(login_url='/login/')    # 局部配置
    """
	使用装饰器——只有登录过的用户才能进入主页
    @login_required(login_url='/login/') # 当用户没登录就访问/home/时,指定跳转  
       到/login/
    @login_required 当用户没登录就访问/home/时,自动跳转到配置文件中的LOGIN_URL下
        若配置文件里没有配置,则自动跳转到/accounts/login/?next=/home/下
    """

    """
    使用装饰器login_required
        自动记录上次页面?next=/home/
    优先级:局部 > 全局
        即若配置文件设置为/xxx/,而采用局部@login_required(login_url='/yyy/'),则跳转 
    到/yyy/路径下
    优缺点:
        全局好处在于不用重复写代码 但跳转页面单一
        局部可以分别跳转到指定页面 但代码书写多
    """

--7.比对原密码

is_right = request.user.check_password(old_password) # .check_password自动加密并比对,结果为布尔值

--8.修改密码

request.user.set_password(new_password)  # 修改对象属性
request.user.save()     # 真正操作到数据库

--9.注销

auth.logout(request)

-auth_user表字段扩展

当我们觉得django自带的auth_user表中字段不够用需要额外加其它字段时,有两种方式实现

--另表关联

第一种:创建另一张表利用外键关系关联(不推荐)
class UserInfo(models.Model):
    phone = models.BigInterField()
    user = models.OneToOneFiled(to = 'User')

--面向对象继承

其实在from django.contrib.auth.models import User中,User源码是继承了AbstractUser类的

为此我们可以继承内置的AbstractUser类来定义一个自己的Model类:

from django.contrib.auth models import AbstractUser

class UserInfo(AbstractUser): # 在models.py文件中书写
    phone = models.BigIntegerField()


"""
auth_user表字段的扩展,采用第二种方式,实际上是创建另一张表(任意)顶代auth_user表
新建表继承AbstractUser后,执行数据库迁移命令后auth_user表不会被创建
且新建表中有全部auth_user中的字段加上自己新扩展的字段

此方式扩展字段的前提/必备条件:
	1、在继承之前没有执行过数据库迁移命令(即auth_user表未被创建),否则需要换一个库操作
		解决办法:
			把所有app下的迁移文件全部删除,只保留__init__py
			admin,auth,app下的迁移文件全删除,只保留__init__py
			删库(数据一定记得先导出来),换库操作,重新迁移
	2、新建表中的字段不要覆盖AbstractUser中原有字段,只扩展额外字段
	3、需在配置文件声明用新表替代auth_user表
		AUTH_USER_MODEL = '应用名.新建表名'
"""

 PS: 替代auth_user表后,auth模块的功能照常使用,只不过参考表由auth_user变为自己新建的表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weer-wmq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值