zoukankan      html  css  js  c++  java
  • auth模块

    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
  • 相关阅读:
    GPS精度因子(GDOP,PDOP,HDOP,VDOP,TDOP)
    VTD专题
    使用Python的Numpy 生成随机数列表
    Win10 下使用Ubuntu子系统
    Python依赖库查找
    使用技巧
    openstreetmap算路服务搭建
    笔记
    markdownpad
    缓和曲线09正弦一波型
  • 原文地址:https://www.cnblogs.com/HuaR-/p/14858032.html
Copyright © 2011-2022 走看看