auth 组件
导包
from django.contrib import auth
1. 登录
对比用户和秘密是否正确
user_obj = auth.authenticate(request, username=username, password=password)保存用户信息 (存到 djang_session表中)
auth.login(request, user_obj)
1.1
def login(request):
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')print(username, password)
判断用户是否存在
user_obj = auth.authenticate(request, username=username, password=password)if user_obj:
如果登录就保存用户信息 (存到 djang_session表中)
auth.login(request, user_obj)
return redirect(reverse('index'))return render(request, 'login.html')
2. 验证是否登录 装饰器
from django.contrib.auth.decorators import login_required
2.1 视图中使用
@login_required(login_url='/auth/app/login/')
def index(request):
print(request.user)
return HttpResponse('index')
2.2 装饰器配置
全局:
在setting.py 下
LOGIN_URL = "/auth/app/login/"
视图上:
@login_required
def index(request):
print(request.user)
return HttpResponse('index')
局部:
@login_required(login_url='/auth/app/login/')
def index(request):
print(request.user)
return HttpResponse('index')
优先级:
局部 > 全局
3. 修改密码
# 检验旧密码
old_password = '11111'
request.user.check_password(old_password)# 设置新密码
new_password = '111111'
request.user.set_password(new_password)# 操作数据库 保存密码
request.user.save()
4. 退出登录
auth.logout(request)
@login_required
def logout(request):
""" 退出登录 """
auth.logout(request)
return redirect(reverse('login'))
5. 注册
# 导入auth 模型
from django.contrib.auth.models import User# 创建普通用户
User.objects.create_user(username='', password='')# 创建超级用户
# 使用代码 创建超级用户 需填邮箱 命令行创建 不填也可以
User.objects.create_superuser(username='', email='', password='')
6. 拓展 User 表
# models.py
from django.contrib.auth.models import User, AbstractUser
继承 AbstractUser
auth_user 表就不会创建
会在自己创建的模型中 出现自己创建的字段 和 auth_user的所有字段要求:
1. 在auth_user表未创建
2. 在settings.py中
AUTH_USER_MODEL = 'app01.UserInfo'
(应用名.模型名)
( 前边是自己的 app . 后边的是自己的模型名 )class UserInfo(AbstractUser):
pass
7. 检查用户的状态和权限:
request.user.is_authenticated: 用户是否已登录
request.user.is_staff: 用户是否是管理员
request.user.is_superuser: 用户是否是超级管理员
request.user.is_active: 用户是否激活
request.user.is_anonymous: 用户是否为匿名用户