auth模块
当涉及到用户相关功能的时候就可以考虑使用auth模块
特别提醒: 如果使用auth模块就去使用全套的,不是自己写一部分,用别人一部分
如何创建超级用户,用户登录django admin的后台管理
在tools里面的run manage.py 点击过后输入终端命令 createsuperuser
校验用户是否存在
先导包 from django.contrip import auth
user_obj = auth.authenticate(username=username, password=password)
在django.user表中校验用户是否存在
如果用户存在就返回一个用户对象,不存在就返回一个None
保存用户登录状态
auth.login(request, user_obj)
保存的是校验用户是否存在时生成的对象
只要保存了用户登录状态,只要有request的地方就可以拿到用户对象(利用session实现,默认会执行一个request.session[键]=值
)
判断当前用户是否登录
request.user.is_authenticated()
返回值是布尔类型
获取当前用户对象
在保存用户状态时就说过有request的地方就可以拿到用户对象
通过: request.user
拿到对象就可以点取值到对象的一些字段属性
如何给视图函数加上校验用户是否登录的登录认证
先导入包:
from django.contrib.auth.decoration import login_required
这个就是一个装饰器,有两种配置方法
局部配置
局部需要指定跳转页面,具体格式如下,优先级最高
@login_required(login_url='/login/')
def home(request):
...
全局配置
先到settings.py
文件夹下面去添加一个配置
LOGIN_URL='/login/' # 指定没有登陆默认跳转的页面为 login 页面
在添加装饰器(全局不用指定,直接加)
@login_required
def home(request):
...
修改密码
校验原密码是否正确
bool = request.user.check_password(old_password)
返回值是布尔类型
设置新密码
request.user.set_password(new_password)
requset.user.save()
记住使用完set_password的时候一定要执行save,不然是无效操作
用户的注册
先导包
form django.contrib.auth.models import User
这一步操作就是相当于把User这张表取出来
# 创建普通用户
User.objects.create_user(username=username, password=password)
# 创建超级用户(创建超级用户必须要传邮箱参数)
User.objects.create_superuser(username=username, password=password, email='123@qq.com')
还有一种之前的往数据库里面直接创建一条数据的create
我们是没法和auth一起使用的,因为保存在数据库里面的密码都是经过加密的,使用create
创建的数据中密码是没有经过加密的.
扩展auth_user表的字段
第一种(利用一对一关系):
不好用
第二种(继承):
- 自己写一个类,继承原来的auth_user类,也就是继承
AbstractUser
- 然后在setting配置文件中,通过
AUTH_USER_MODEL = '应用名.表名'
来告诉django要用新建的类来代替auth_user表
AUTH_USER_MODEL = '应用名.表名'
(一定要配置)
1. models.py
# 先导入包
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
tel = models.IntegerField()
...
注意:
- 当继承了
AbstractUser
之后,我们自定义的字段名不能和之前的字段一样 - 通过上面的方式继承了的表还可以
使用auth的所有功能
- 如果在配置前已经执行了数据库迁移命令,就不能再创建了.