验证功能auth
django.contrib.auth.models import User
User 是django默认管理整个项目的用户表,它继承了AbstractUser这个类,实际上我们操作的就是AbstractUser表,只是换了一个名字
导入auth:from django.contrib import auth
先明白验证的作用:
- 限制浏览器行为,根据情况不让它访问
django通过用户表验证,用户登陆,用户退出,超时退出,设置权限,设置无权访问访问跳转页面实现这个功能
- 用户表验证表验证动作,authenticate()方法返回一个AbstractUser对象。
user = auth.authenticate(username='theuser',password='thepassword'),获取验证表对象
u.is_authenticated==True 可以用作if判断。
- 标注用户的登陆状态,例子里的user是上一行的user.
-auth.login(request,user),根据验证结果登录,无返回值
在请求中保留用户ID和后端。这样一来,用户就不必在每个请求上重新认证。注意,匿名会话期间的数据集在用户登录时保留。
显然在浏览器中的cookie中留下了一个标识
- 用户退出
- loginout(request),退出登陆,清空用户的session,无返回值,
-设置权限:
-需要登录的视图
-引入装饰器:from django.contrib.auth.decorators import login_required
-在视图上加入:@login_required
- 用户表验证表添加用户,删除用户,修改密码
- 增加用户
from django.contrib.auth.models import User user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)
- 增加超级用户
from django.contrib.auth.models import User user_obj = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)
- 检查用户密码正确与否:
ok = user_obj.check_password('密码') 或着: ok = request.user.check_password(raw_password='原密码')
- 修改密码
user_obj.set_password('新密码') user_obj.save()
- 用户修改密码后端实例
@login_required #先登陆 def set_password(request): user = request.user #获取验证结果 err_msg = '' if request.method == 'POST': old_password = request.POST.get('old_password', '') #获取旧密码 new_password = request.POST.get('new_password', '') #获取新密码 repeat_password = request.POST.get('repeat_password', '') #获取重复密码 # 检查旧密码是否正确 if user.check_password(old_password): if not new_password: err_msg = '新密码不能为空' elif new_password != repeat_password: err_msg = '两次密码不一致' else: user.set_password(new_password) user.save() return redirect("/login/") else: err_msg = '原密码输入错误' content = { 'err_msg': err_msg, } return render(request, 'set_password.html', content)
- 设置无权访问访问跳转页面
在 setting.py文件中 LOGIN_URL = '/login/' # 这里配置成你项目登录页面的路由,自定义
自定义用户表
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): """ 用户信息表 """ phone = models.CharField(max_length=11, null=True, unique=True) #增加自定义字段 def __str__(self): return self.username
替代原生USER表
setting.py中: AUTH_USER_MODEL = "app名.UserInfo"