auth组件

AUTH模块

django自带的用户认证模块

主要功能,用户信息管理,用户注册, 登录.注销,修改密码信息等,默认使用自定义的auth_user存储用户信息,用auth_session保存用户登录状态.

扩展默认的auth_user表

更改默认的auth_user表,完成自定一字段

方法一

利用一对一关联一张表

class UserDetail(models.Model):
	 phone = models.BigIntegerField()
	 user = models.OneToOneField(to='User')
方法二

使用继承关系

从导入d.c.a.m导入au

提前要去settings配置文件中添加配置信息,

AUTH_USER_MODEL = "app名.表名"

AUTH_USER_MODEL = "app01.UserInfo"

from django.contrib .auth .models import AbstractUser

class UserInfo(AbstractUser):
    phone = models.BigIntegerField()
    gender = models.CharField(max_length=32)

一旦提交了新的表设计,后续对表的操作就要使用我们自己新建的表名,而原来自动创建的auth-user表就已经不存在了.

auth模块的常用方法

  1. 创建用户

    如果使用默认表,需要提前导入表

    from django.contrib.auth.models import User

    #导入自己自定义创建的表
    from app01.models import UserInfo
    def register(request):
        if request.method =="POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
            #以明文存储密码
            UserInfo.objects.create(username=username,password=password) 
            #创建普通用户,密码自动加密
            UserInfo.objects.create_user(username=username,password=password)
            #创建超级用户,需要写入至少用户名,密码,邮箱
            UserInfo.objects.create_superuser(username=username,password=password)
    
  2. 校验用户名与密码是否匹配
    from django.contrib import auth
    def check_user(request):
        if request.method =="POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
            user_obj = auth.authenticate(request,username=username,password=password)
    

    auth.authenticate()方法,返回user对象,括号中必须传入用户名和密码,

    会自动加密密码并去数据库中比对.

    user_obj.password返回的是密码的密文.

  3. 保存用户登录状态

    将用户的登陆状态保存到auth_session中

    res = auth.authenticate(request,username=username,password=password)
    auth.login(request,res)
    

    auth.login(request,res)执行之后,就可以在任何可以拿到request的地方,通过request.user获取当前登录的用户对象,

    如果没有登录,调用request.user返回一个AnonymousUser对象,表示匿名用户.

  4. 判断当前用户是否登录
    request.user.is_authenticated()
    

    返回bool值

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

    from dcad import lr

    from django.contrib.auth.decorators import login_required
    #局部配置
    @login_required(login_url='/login/')
    def index(request):
        pass
    #全局配置
    #settings配置文件中 直接配置
    LOGIN_URL = '/login/'
    @login_required
    	def index(request):
    		pass
    
    

    如果全局和局部都配置了,优先以局部为准

  6. 判断密码是否正确
    res = request.user.check_password(password)
    

    返回bool值

  7. 修改密码
    request.user.set_password(new_password)
    request.user.save()
    

    切记保存语句一定要执行

  8. 注销
    auth.logout(request)
    
posted @ 2019-12-05 21:31  Agsol  阅读(95)  评论(0编辑  收藏  举报