auth组件
AUTH模块
django自带的用户认证模块
主要功能,用户信息管理,用户注册, 登录.注销,修改密码信息等,默认使用自定义的auth_user存储用户信息,用auth_session保存用户登录状态.
扩展默认的auth_user表
更改默认的auth_user表,完成自定一字段
方法一
利用一对一关联一张表
class UserDetail(models.Model):
phone = models.BigIntegerField()
user = models.OneToOneField(to='User')
方法二
使用继承关系
从导入d.c.a.m导入au
提前要去settings配置文件中添加配置信息,
AUTH_USER_MODEL = "app名.表名"
AUTH_USER_MODEL = "app01.UserInfo"
from django.contrib .auth .models import AbstractUser
class UserInfo(AbstractUser):
phone = models.BigIntegerField()
gender = models.CharField(max_length=32)
一旦提交了新的表设计,后续对表的操作就要使用我们自己新建的表名,而原来自动创建的auth-user表就已经不存在了.
auth模块的常用方法
-
创建用户
如果使用默认表,需要提前导入表
from django.contrib.auth.models import User
#导入自己自定义创建的表 from app01.models import UserInfo def register(request): if request.method =="POST": username = request.POST.get("username") password = request.POST.get("password") #以明文存储密码 UserInfo.objects.create(username=username,password=password) #创建普通用户,密码自动加密 UserInfo.objects.create_user(username=username,password=password) #创建超级用户,需要写入至少用户名,密码,邮箱 UserInfo.objects.create_superuser(username=username,password=password)
-
校验用户名与密码是否匹配
from django.contrib import auth def check_user(request): if request.method =="POST": username = request.POST.get("username") password = request.POST.get("password") user_obj = auth.authenticate(request,username=username,password=password)
auth.authenticate()方法,返回user对象,括号中必须传入用户名和密码,
会自动加密密码并去数据库中比对.
user_obj.password返回的是密码的密文.
-
保存用户登录状态
将用户的登陆状态保存到auth_session中
res = auth.authenticate(request,username=username,password=password) auth.login(request,res)
auth.login(request,res)执行之后,就可以在任何可以拿到request的地方,通过request.user获取当前登录的用户对象,
如果没有登录,调用request.user返回一个AnonymousUser对象,表示匿名用户.
-
判断当前用户是否登录
request.user.is_authenticated()
返回bool值
-
校验用户是否登录装饰器
from dcad import lr
from django.contrib.auth.decorators import login_required #局部配置 @login_required(login_url='/login/') def index(request): pass #全局配置 #settings配置文件中 直接配置 LOGIN_URL = '/login/' @login_required def index(request): pass
如果全局和局部都配置了,优先以局部为准
-
判断密码是否正确
res = request.user.check_password(password)
返回bool值
-
修改密码
request.user.set_password(new_password) request.user.save()
切记保存语句一定要执行
-
注销
auth.logout(request)