简介
Django自带了强大的用户认证系统Auth, 执行数据库迁移命令之后默认产生的auth_user表来存储用户的数,自带的admin后台管理用户登录参考的就是auth_user表
创建admin后台管理员用户:
python manage.py createsuperuser
auth_user 表字段
| 字段 | 释义 |
|---|---|
| id | ID |
| password | 密码 |
| last_login | 最后登录时间 |
| is_superuser | 是否是管理员 |
| username | 用户名 |
| first_name | 姓 |
| last_name | 名 |
| 邮箱 | |
| is_staff | 是否是工作人员 |
| is_active | 是否激活 |
| date_joined | 创建时间 |
常用方法
登入认证
关键字:auth.authenticate()
from django.shortcuts import redirect, HttpResponse, renderfrom django.contrib import authdef login(request):if request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')user_obj = auth.authenticate(request, username=username, password=password)if user_obj:print(user_obj, '登录成功', type(user_obj))else:print("效验失败", user_obj)return render(request, 'login.html')
保存用户状态
关键字:auth.login()
# 登入成功后调用auth.login(request, user_obj) # 内部调用的就是 request.session['key']=user_obj
获取当前用户对象
关键字:request.user
# 登入成功,并保存用户状态
判断当前用户是否登录
关键字:request.user.is_authenticated()
res = request.userprint(res)# 登录打印:用户名# 未登录打印:AnonymousUser
校验登录装饰器
关键字:@login_required(login_url='登录页面路径')
局部配置
from django.shortcuts import redirect, HttpResponse, renderfrom django.contrib import authfrom django.contrib.auth.decorators import login_requireddef login(request):res = request.userprint(res)if request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')user_obj = auth.authenticate(request, username=username, password=password)if user_obj:print(user_obj, '登录成功', type(user_obj))auth.login(request, user_obj)target_path = request.GET.get('next')return redirect(target_path)else:print("效验失败", user_obj)return render(request, 'login.html')@login_required(login_url='/login/') # 局部配置def home(request):return HttpResponse('只有登录的用户能看到')
全局配置
settings.py
LOGIN_URL = '/login/' # 需要在配置文件中添加配置
view.py
@login_required # 全局部配置def home(request):return HttpResponse('只有登录的用户能看到')
修改密码
关键字:request.user.check_password()、request.user.set_password、request.user.save()
from django.shortcuts import redirect, HttpResponse, renderfrom django.contrib import authfrom django.contrib.auth.decorators import login_requireddef login(request):user_obj = auth.authenticate(request, username='kevin', password='admin123')print(user_obj)auth.login(request, user_obj)if request.method == 'POST':old_password = request.POST.get('old_password')new_password = request.POST.get('new_password')if request.user.check_password(old_password): # 检验密码返回 True or Falserequest.user.set_password(new_password) # 修改密码request.user.save() # 一定要保存else:return HttpResponse('旧密码错误')return render(request, 'login.html')
注销登录
关键字:auth.logout(request)
# 注销当前登录用户:auth.logout(request) # 内部使用的就是 request.session.flush()
注册用户
from django.contrib.auth.models import User# 创建管理员用户user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',..)# 创建普通用户user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)
补充
request.user.username: 获取用户名request.user.password:获取密码request.user.is_staff:判断用户是否拥有网站的管理权限request.user.is_active:判断是否允许用户登录request.user.is_superuser:判断是否是超级管理员
扩展表字段
继承(推荐)
class MyUser(AbstractUser):# 编写AbstractUser类中没有的字段,不能冲突phone = models.BigIntegerField()addr = models.CharField(max_length=64)
settings.py
# 不在使用auth_user 而是使用自定义的表AUTH_USER_MODEL = 'app01.MyUser'
注意
- 类继承之后,库里面是第一次操作才可以,然后再执行数据库迁移命令,并且是
auth模块所有的方法都可以直接在自定义模型类上面使用(自动切换参照表)
