zoukankan      html  css  js  c++  java
  • django框架之十一 Auth模块

    Auth模块

    一、什么是auth模块

    Auth模块是django自带的用户认证模块

    Auth模块是由django自带的用户认证模块,可以实现包括用户注册、用户登录、用户认证、注销、修改密码等功能。默认使用auth_user表来存储用户数据。

    二、Auth模块使用

    1、创建超级用户(createsuperuser)

    创建超级用户就是在auth_user表中插入数据,密码是加密的

    在Run manage.py Task  创建

    createsuperuser
    

    2、查询用户(authenticate())

    验证用户名以及密码是否正确,一般需要username、password两个关键字参数。如果认证成功(用户名和密码正确有效),便会返回一个User对象。

    from  django.contrib import auth
    user_obj = auth.authenticate(request、username=name,password=pwd)  

    不能使用filter这种查询方法,因为User表存的密码是加密的。

    models.User.objects.filter(username=username,password=password).first()
    

    3、登录用户(login())

    该 函数接受一个HttpResponse对象,以及一个经过查询认证的user_obj

    登录之后,会将用户状态记录到session中

    from django.contrib  import auth
    
    auth.login(request,user_obj)
    

    4、登录成功

    只要执行了上面那句话登录成功了,你就可以在后端任意位置通过request.user获取到当前用户对象

    user_obj = request.user
    

    5、判断用户是否登录(is_authenticated)

    用来判断当前请求是否通过了认证,如果通过了就是true,反之false

    request.user.is_authenticated
    

    6、登录认证装饰器

    快捷的给某个视图添加登录校验

    若用户没有登录,则会跳转到django默认的登录URL‘/accounts/login/’,并传递当前访问url的绝对路径(登录成功后,会重定向回到该路径)

    如果自定义了登录URL则需要再settings.py文件中通过LOGIN——URL设置登录路径

    from django.contrib.auth.decorators import  login_required
    
    @login_required(login_url='/xxx/') #局部配置  直接在装饰器里面写一个登录路径
    def index(request):
          pass
    
    
    #全局配置  settings文件中写
    LOGIN_URL  = '/xxx/'
    设置完后直接写装饰器@login_required就可以
    

    7.注册超级用户和普通用户

    错误方法:User.objects.create(username =username,password=password)  # 创建用户名的时候 千万不要再使用create 了
    User.objects.create_user(username =username,password=password)  # 创建普通用户
    User.objects.create_superuser(username =username,password=password,email='123@qq.com')  # 创建超级用户  邮箱必填
    

    8.校验密码(check_password())

    校验密码
    request.user.check_password(old_password)
    

    9.修改密码(set_password())

    注意:修改密码的时候,一定要save保存,否则不会失效
    request.user.set_password(new_password)
    request.user.save()
    

    10.退出登录(logout())

    当调用该函数时,当前请求的session信息会全部清除,相当于request.session.flush().该用户即使没有登录,使用该函数也不会报错。

    auth.logout(request)
    

    11.User对象的其他属性

    #在网站上线以前,将is_active和is_staff设置为False
    is_active        #禁止登录网站(用户还存在,封号)
    is_staff           #是否对网站有管理权限(能不能登录admin)
    
    request.user.is_active = False
    request.user.is_staff  =  False

    三、自定义auth_user表

    1.方法一:定义一个表模型,跟User一对一关联(不推荐使用)

    from django.contrib.auth.models import  User
    
    class  UserDetail(models.Model):
            phone = models.CharField(max_lenth=32)
            #一对一跟auth_user表做关联
            #如果是从外部引入的表模型,是不能加引号的
            #如果加引号,只是在当前models找
            user=models.OneToOneField(to=User)
    

    2.方法二:使用类的继承,继承(AbstractUser)

    from django.contrib.auth.models  import AbstractUser
    
    class Userinfo(AbstractUser):
            #千万不要跟原来表中字段重复 只能创新
            phone = models.BigIntegerField()
            avatar = models.CharField(max_length=32)

     注意:

    1.一旦我们通过继承来实现扩展auth_user表,那么做数据库迁移,以后就没有auth_user这个表了,以后认证组件用的表就是UserInfo。原来使用 auth_user 表模型的地方全部要用新的表模型——UserInfo(这个是你自定义的模型类)
    
    2.告诉django不再使用auth默认的表,而是使用你自定义的表,需要在settings.py中设置
    AUTH_USER_MODEL = 'app01.Userinfo'   '应用名.类名'
    

      

     

  • 相关阅读:
    PyQt5 -1 最基本的小窗口
    浅谈线段树
    最小生成树问题
    最短路问题
    多重背包问题
    02背包(嘻嘻,完全背包)
    01背包例题
    背包问题(好奇怪)
    关于深搜及广搜
    搜索回溯(第二)
  • 原文地址:https://www.cnblogs.com/ltyc/p/13879104.html
Copyright © 2011-2022 走看看