zoukankan      html  css  js  c++  java
  • Django之Auth用户认证模块

    auth模块

    auth是Django提供用来用户认证的模块,它默认用auth_user表来存放用户,Django执行数据库迁移命令的时候,会自动创建很多表,其中就有auth_user表

    auth模块提供的方法

    1、创建超级用户的方法:

    命令创建:python manage.py createsuperuser   (注意:该方法可以不写邮箱地址)

    代码创建:(1) from django.contrib.auth.models import User  导入模块

         (2)user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)(必须要有邮箱)

    2、登陆验证方法:authenticate()

    '''
    该方法需要用户跟密码两个参数,缺一不可
    验证成功会返回一个User对象
    '''
    User_obj=auth.authenticate(request,username=username,password=password)

    3、保存用户状态: auth.login(request,user_obj)

    auth.login(request,User_obj)
    '''
    等价于request.session['key']=User_obj
    执行该方法后,就可以通过request.user来获取当前登陆的用户对象
    '''

    4、判断用户是否登陆:is_authenticated()

    request.user.is_authenticated()
    '''
      该方法返回的是布尔值  
    '''

    5、获取当前用户对象:request.user

    request.user    #用户对象
    '''
    用户对象属性:
    username: 用户名
    password:  密码
    is_staff : 用户是否拥有网站的管理权限.
    is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录
    '''

    6、校验用户是否登陆的装饰器:@login_required(login_url='跳转链接')

    from django.contrib.auth.decorators import login_required
    #局部配置:直接在方法上面引入
    @login_required(login_url='/login')
    def xxx(reqeust):
        pass
    
    #全局配置:在配置文件settings中添加一句代码
    LOGIN_URL='/login/'
    '''
    注意:局部配置跟全局配置同时存在的时候,
            局部配置的优先级大于全局配置
    '''

    7、修改密码用到的密码验证、跟密码修改方法:

    #旧密码的校验:check_password
    request.user.check_password('oldpassword')
    #密码修改 :set_password
    request.user.set_password(new_passwd)
    request.user.save()
    '''
    注意:密码修改后必须调用用户对象的save()方法,才能完全实现数据库的修改操作。
    '''

    8、注销功能:auth.logout(request)

    auth.logout(request)
    '''
    该方法会清除用户的session登陆信息
    '''

    9、注册功能:create_user()

     from django.contrib.auth.models import User
    User.objects.create_user(username=username,password=password)
    '''
    create_user方法:会自动给密码加密
    '''

    扩展默认auht_user表的字段

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    class My_User(AbstractUser):
        '''
        注意:继承了AbstractUser后,在执行数据库迁移命令的时候
             auth_user表将不会被创建出来,而是直接创建My_User表
             My_User表中包含auth_user表中的所有字段,同时还有我们自己添加的字段
        该方法前提条件:
            1、在继承AbstractUser之前没有执行数据库迁移命令
                如果auth_user表已被创建,那么只能换数据库操作
            2、继承的类里面不用覆盖AbstractUser里面的字段名
                即:扩展字段名不要跟AbstractUser里面的字段名一致     
            3、需要在配置文件告诉Django你要用My_User替代auth_user表
                AUTH_USER_MODEL='应用名。表名‘
                如:AUTH_USER_MODEL='app01。My_User‘
        '''
        phone=models.BigIntegerField()

    注意:需要在配置文件声明一下AUTH_USER_MODEL='应用名.表名‘

    ef login(request):
        url=request.GET.get('next')
        if request.method=='POST':
            username=request.POST.get('username')
            password=request.POST.get('password')
            res=auth.authenticate(request,username=username,password=password)
            print(res.username,res.password)
            if res:
                auth.login(request,res)#等价于request.session['key']=res
                if url:
                    return redirect(url)
                else:
                    return redirect('/home/')
    
        return render(request,'login.html',locals())
    #注册功能
    def regist(request):
        if request.method=='POST':
            username=request.POST.get('username')
            password=request.POST.get('password')
            confirm=request.POST.get('confirm')
            if password==confirm:
                #注册用户
                User.objects.create_user(username=username,password=password)
                return redirect('/login/')
    
        return render(request,'regist.html')
    #局部配置
    @login_required(login_url='/login/')
    def home(request):
        #is_authenticated用来判断用户是否登陆
        if request.user.is_authenticated():
            return render(request,'home.html')
        else:
            return redirect('/login/')
    #修改密码
    @login_required()
    def set_passwd(request):
        user_obj=request.user#用户对象
        if request.method=='POST':
            username=request.POST.get('username')
            passwd=request.POST.get('old_password')
            new_passwd=request.POST.get('new_password')
            confirm=request.POST.get('confirm')
            is_passwd=request.user.check_password(passwd)
            if is_passwd:
                if new_passwd==confirm:
                    request.user.set_password(new_passwd)
                    request.user.save()
                    return redirect('/login/')
        return render(request,'set_passwd.html',locals())
    
    #注销
    @login_required
    def zhuxiao(request):
        #清除用户的登陆信息
        auth.logout(request)
        return HttpResponse('注销成功')
    autho模块实现登陆、注册、修改、注销的功能

     

  • 相关阅读:
    ACM FPGA 2019 -- Reconfigurable Convolutional Kernels for Neural Networks on FPGAs 论文解读
    VLSI基础-- 第六章 时序逻辑电路
    ISSCC-2020:GANPU 论文解读
    fabric知识梳理图解
    在浏览器端获取文件的MD5值
    mysql实现随机获取几条数据的方法
    数据仓库之Data Vault模型总结
    大数据分析基础——维度模型
    ArrayList类源码解析——ArrayList动态数组的实现细节(基于JDK8)
    Java的四个标记接口:Serializable、Cloneable、RandomAccess和Remote接口
  • 原文地址:https://www.cnblogs.com/nq31/p/13799236.html
Copyright © 2011-2022 走看看