zoukankan      html  css  js  c++  java
  • 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表了,写上新建的表的路径

  • 相关阅读:
    BEC listen and translation exercise 44
    中译英12
    BEC listen and translation exercise 43
    中译英11
    BEC listen and translation exercise 42
    中译英10
    BEC listen and translation exercise 41
    中译英9
    BEC listen and translation exercise 40
    中译英8
  • 原文地址:https://www.cnblogs.com/bigbox/p/12193973.html
Copyright © 2011-2022 走看看