Hr_chram

导航

 

auth模块与django的后台管理息息相关

from django.contrib import auth

1 创建管理员

  

先执行数据库迁移命令  就直接迁移 无需再models中创建多余的表
python3 manage.py makemigrations
python3 manage.py migrate
执行完成之后在迁移的数据库中就可以看到很多张auth开头的表名前缀

 

 

使用 python3 manage.py createsuperuser 命令
创建完成过后可以在auth_user 这张表中看到创建的用户

 

创建完成过后就可以登录啦

http://127.0.0.1:8000/admin

输入创建好的用户名密码就可以登陆啦

 

2 用户登陆校验

from django.contrib.auth.models import AbstractUser     # AbstractUser 就是auth_user这张表  但是前端传过来的是明文的,表中的是密文的,所以无法使用这张表校验

前端传过来的用户名和密码接收
校验用户名和密码是否正确
  user_obj = auth.authenticate(request,username=username,password=password)  # 会自动帮你去表里面校验用户名和密码,并且在校验之前会自动帮你加盐加密处理然后去表中比对,返回值是用户对象
  print(user_obj)    # lkk  如果校验不成功 返回None    相当于是 models.User.objects.filter(username=username,password=password).first()

  校验正确过后,就要保存用户登陆状态
  if user_obj:
    # 保存用户登陆状态
    auth.login(request,user_obj)    
    # 这串代码背后对应的操作
      去django.session表中生成一个随机字符串(session),然后也让浏览器保存一份(session)
      只要执行了auth.login()方法,可以在任意位置通过request.user获取到当前登陆的数据对象






如果通过这种方法来判断用户是否登陆,有些许不适
可以通过
  request.user.is_authenticated来判断用户是否登陆
  

  print(request.user.is_authenticated)    # CallableBool(False)  没有登陆
  print(request.user.is_authenticated())   # False


方法总结
校验用户名和密码是否正确
res = auth.authenticate(request,username=username,password=password)  返回的是用户对象或者None

request.user.is_authenticated()   判断用户是否登陆  返回True 或者 False

  

3. 修改密码

修改密码是基于登陆过后才能修改,所以需要用到登陆认证装饰器

auth模块也给你做啦

from django.contrib.auth.decoratora import login_required

@login_required(login_url='/login/')      # 如果没有登陆 会自动跳转到括号中的指定页面,不写默认跳到一个不知名的url,但是你也没开设该接口 404
@login_required   # 全局配置 在settings中配置 LOGIN_URL = '/你指定跳转的url/'
# 如果全局配置和局部配置都存在,那么跳转到局部指定的url
def set_pwd(request):   return render(request,'set_pwd.html')

def set_pwd(request):
  old_password = request.POST.get('old_password')
  new_password = request.POST.get('new_password')
  is_right = request.user.check_password(old_password)  # True or False
  if is_right:
    # 修改密码
    request.user.set_password(new_password)
    # 一定要保存
    request.user.save()  # 不写则无法修改
  return render(request,'sp.html',locals())

方法总结
  request.user.check_password  # 查看旧密码是否正确
  request.user.set_password   # 设置密码
  request.user.save()       #保存用户信息
from django.contrib.auth.decoratora import login_required  登陆认证装饰器
局部配置
  @login_required('/login/')
全局配置
  LOGIN_URL = '/login/'
ps :全局和局部同时存在,那么局部的作用域大于全局的,优先跳转局部指定的url

 

posted on 2021-06-07 11:06  遮光镜  阅读(62)  评论(0编辑  收藏  举报