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表了,写上新建的表的路径

 

 

 

 

posted @ 2020-01-14 20:35  躺云飘  阅读(130)  评论(0编辑  收藏  举报