• 57.2 django auth模块


    1.django auth 模块

    auth模块
            django用户相关的自带的功能模块   auth_user表
            如何创建超级用户
                createsuperuser
            模块导入
                from django.contrib import auth
                from django.contrib.auth.models import User
            auth方法大全
                1.创建用户    如果使用UserInfo 继承AbsractUser 创建用户(注册)  models.UserInfo.objects.create_user()
                    User.objects.create()  # 密码是明文
                    User.objects.createuser()  # 基本都用它 
                    User.objects.createsuperuser()  # 邮箱要给数据
                    
                2.校验用户名和密码是否正确
                    auth.authenticate(username=username,password=password)  # 用户名和密码两个一个都不能少
                    # 该方法当用户名和密码正确的时候返回的用户对象 不正确返回None
                
                3.保存用户登录状态
                    auth.login(request,user_obj)  # 这一句执行之后 request.user获取当前登录的用户对象
                
                4.如何判断当前用户是否登录 以及如何获取当前登录用户对象
                    request.user.is_authenticated()  # 判断是否登录
                    request.user  # 登录用户对象
                
                5.校验用户是否登录装饰器
                    from django.contrib.auth.decorators import login_required
                    # 局部配置
                    @login_required(login_url='/login/')
                    def xxx(request):
                        return HttpResponse('xxx页面')
                    
                    # 全局配置
                    配置文件中写以下代码
                    LOGIN_URL = '/login/'
                    @login_required
                    def xxx(request):
                        return HttpResponse('xxx页面')
                    
                    # 如果两个都设置了 那么优先执行局部配置
                
                6.修改密码
                    request.user.check_password(old_password)  # 校验原密码是否正确
                    
                    request.user.set_password(new_password)
                    request.user.save()                        # 一定要保存 
                
                7.注销功能
                    auth.logout(request)
    如何扩展auth_user表
    # 1 利用一对一表关系()
    
    # 2 利用类的继承
       # 1 类的继承
       from django.contrib.auth.models import User,AbstractUser
       # Create your models here.
       class Userinfo(AbstractUser):
          phone = models.BigIntegerField()
          avatar = models.FileField()
          # 扩展的字段 尽量不要与原先表中的字段冲突
    
       # 2 配置文件
       AUTH_USER_MODEL = '应用名.表名'
    
       """
       django就会将userinfo表来替换auth_user表
       并且之前auth模块所有的功能不变 参照的也是userinfo表
       """

    解释:

    1.如何创建超级用户

     用户密码默认密文

     超级用户登录用户管理页面 可以管理所有注册的模型表

     2.用户表管理(auth模块用法大全)

    模块导入
                from django.contrib import auth
                from django.contrib.auth.models import User

     1.注册功能(创建用户)

    User.objects.create()  # 密码是明文
                    User.objects.createuser()  # 基本都用它 
                    User.objects.createsuperuser()  # 邮箱要给数据

     2.登录功能:效验密码是否正确,并保存用户状态  ,数据库保存session

    def login(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')  # 明文
            # 数据库校验用户名和密码是否正确
            # User.objects.filter(username=username,password=password)
            user_obj = auth.authenticate(request,username=username,password=password)
            """
            用户名密码正确返回的是用户对象
            错误返回None
            """
            if user_obj:
                # 保存用户登录状态
                # request.session
                auth.login(request,user_obj)
                """
                只要执行了这一句话 之后在任意可以获取到request对象的地方
                都可以通过request.user获取到当前登录的用户对象
                """
                return HttpResponse("登录成功")
        return render(request,'login.html')

    3.如何判断用户是否登录:1.先登录:auth.login(request,user_obj)  2. 判断用户是否登录: request.user.isauthenticated()

                                                3. request.user 获取的是用户对象

    返回的是布尔类型

     

     3

    3.校验用户是否登录装饰器 

    @login_required(login_url='/login/')   url 为没有登陆时跳转的页面              思考  cbv如何装饰

    from django.contrib.auth.decorators import login_required
                    # 局部配置
                    @login_required(login_url='/login/')
                    def xxx(request):
                        return HttpResponse('xxx页面')
                    
                    # 全局配置
                    配置文件中写以下代码
                    LOGIN_URL = '/login/'
                    @login_required
                    def xxx(request):
                        return HttpResponse('xxx页面')
                    
                    # 如果两个都设置了 那么优先执行局部配置

    4.修改密码:1.先校验旧密码是否正确,2.设置新密码, 3.保存

    修改密码
                    request.user.check_password(old_password)  # 校验原密码是否正确
                    
                    request.user.set_password(new_password)
                    request.user.save()            

    5.注销功能:session表中  记录删除

    @login_required
    def logout(request):
        auth.logout(request)
        return HttpResponse('注销成功')

    2.user表扩展(既想使用原有表的功能,又想扩展字段)   auth所有的功能不受影响

    1.继承abstract表   2. 配置文件告诉django      AUTH_USER_MODEL = '应用名.表名'

    继承abstractuser表

    与user创建用户区别        如果使用UserInfo 继承AbsractUser 创建用户(注册) models.UserInfo.objects.create_user()

    如何扩展auth_user表
            # 1 利用一对一表关系()
            
            # 2 利用类的继承
                # 1 类的继承
                from django.contrib.auth.models import User,AbstractUser
                # Create your models here.
                class Userinfo(AbstractUser):
                    phone = models.BigIntegerField()
                    avatar = models.FileField()
                    # 扩展的字段 尽量不要与原先表中的字段冲突
            
                # 2 配置文件
                AUTH_USER_MODEL = '应用名.表名'
                """
                django就会将userinfo表来替换auth_user表
                并且之前auth模块所有的功能不变 参照的也是userinfo表
                """

    解释:  查看user表源码   user表继承abstractuser

     创建自定义扩展表

    1.在models模块中    继承abstract,通过models.FileField()  形式创建

    from django.db import models
    from django.contrib.auth.models import User,AbstractUser
    # Create your models here.
    class Userinfo(AbstractUser):
        phone = models.BigIntegerField()
        avatar = models.FileField()
        # 扩展的字段 尽量不要与原先表中的字段冲突

    2.在配置文件中告诉django 现在不用默认的user表了,写上新建的表的路径

  • 相关阅读:
    平衡的括号[UVA-673]
    Spark GraphX图形数据分析
    Spark sql
    Spark 分布式计算原理
    spark 算子实例
    window scala-2.11.8 安装
    spark 2.3.3 安装
    安装jdk
    Logstash-6.2.2安装和Kibana-6.2.2安装:
    elasticsearch-6.2.2 安装
  • 原文地址:https://www.cnblogs.com/bigbox/p/12193973.html
Copyright © 2020-2023  润新知