auth模块
auth模块
1. 简介
1. django提供给你快速完成用户相关功能的模块
(1) 用户相关功能:创建、认证、编辑...
2. django也配套提供了一张'用户表'
(2) 执行数据库迁移命令之后默认产生的auth_user
3. django自带的admin后台管理用户登录参考的就是auth_user表
2. 导入
from django.contrib import auth
3. 常用模块方法
# 1.验证用户名和密码是否正确
"""authenticate只能是对 用户名-密码 两个字段进行验证, 别的字段就直接还回,不会验证。------> 源码分析的结果 """
auth.authenticate(request, name=name, pwd = pwd)
# 2.保存用户登录状态
is_obj = auth.authenticate(request, name=name, ped = ped)
auth.login(request, is_obj)
# 3.获取当前用户对象
request.user
# 4.判断当前用户是否登录
request.user.is_authenticated()
# 5.校验登录装饰器
from django.contrib.auth.decorators import login_required
# 局部配置 login_url='/lg/'没有登录跳转指定页面 /lg/
@login_required(login_url='/lg/')
# 全局配置 需要在配置文件(setting.py)中添加配置
LOGIN_URL = '/lg/'
然后函数上面写: @login_required
# 6.修改密码
#核对密码
request.user.check_password()
#修改密码, 两者结合使用
request.user.set_password()
request.user.save()
# 7.注销登录
auth.logout(request)
# 8.注册用户
from django.contrib.auth.models import User
User.objects.create_superuser()
User.objects.create_suser()
4. 参考代码
点击查看代码
from django.contrib import auth
# from django.contrib.auth.models import AbstractUser
def lg(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
'''既然选择使用auth模块 那么就用它的全套功能'''
# AbstractUser.objects.filter(username=username,password=password)
is_user_obj = auth.authenticate(request,username=username,password=password) # 先对密码做加密处理 然后再比对
# print(res) # 校验正确返回的是用户对象 错误返回的是None
if is_user_obj:
# 记录用户登录状态
auth.login(request,is_user_obj) # 自动帮你操作session相关
return HttpResponse('登录成功')
return render(request,'lg.html')
def get_user(request):
print(request.user) # 获取当前登录的用户对象 或者是 匿名用户
print(request.user.is_authenticated()) # 判断用户是否登录 返回布尔值
if request.user.is_authenticated():
print(request.user.username)
print(request.user.password)
print(request.user.last_login)
return HttpResponse('查看当前用户是否已登录')
from django.contrib.auth.decorators import login_required
# @login_required # 用户没有登录 默认跳转到/accounts/login/ 也可以自定义
# @login_required(login_url='/lg/') # 局部配置
@login_required # 采用全局配置
def index(request):
return HttpResponse("index页面 只有登录的用户才可以查看")
@login_required
def home(request):
return HttpResponse("home页面 只有登录的用户才可以查看")
@login_required
def func(request):
return HttpResponse("func页面 只有登录的用户才可以查看")
@login_required
def set_pwd(request):
if request.method == 'POST':
old_password = request.POST.get('old_password')
new_password = request.POST.get('new_password')
# 1.先比对原密码是否正确
is_right = request.user.check_password(old_password) # 自动加密再比对
if is_right:
# 2.修改密码
request.user.set_password(new_password) # 临时修改密码
# 3.保存数据
request.user.save() # 将修改操作同步到数据库中
return render(request,'set_pwd.html',locals())
@login_required
def logout(request):
auth.logout(request)
return HttpResponse('注销')
from django.contrib.auth.models import User
def register(request):
# User.objects.create(username='tony',password='123') # 不能使用create
# User.objects.create_user(username='oscar',password='123') # 创建普通用户
User.objects.create_superuser(username='admin',password='123',email='123@qq.com') # 创建超级管理员
return HttpResponse('注册功能')
5. auth扩展表字段
1. models.py文件
from django.contrib.auth.models import AbstractUser # 导入
class Users(AbstractUser):
# 编写AbstractUser类中没有的字段 不能冲突!!!'
phone = models.BigIntegerField()
addr = models.CharField(max_length=32)
mobile = models.CharField(max_length=11, unique=True)
# 需要pillow包的支持 ImageField继承了 FileField只存储图片
icon = models.ImageField(upload_to='icon', default='icon/default.png')
class Meta:
# 指定表名, 不修改的话 --> app名_表名
db_table = 'luffy_user'
# 后台管理中显示中文
verbose_name = '用户表'
verbose_name_plural = verbose_name
def __str__(self): # 打印对象是, 显示用户名
return self.username
2. setting.py中添加配置
# Users; 对应数据库的表名
AUTH_USER_MODEL = 'app01.Users'