auth模块

auth模块

1. 简介

1. django提供给你快速完成用户相关功能的模块
     (1) 用户相关功能:创建、认证、编辑...
2. django也配套提供了一张'用户表'
     (2) 执行数据库迁移命令之后默认产生的auth_user
3. django自带的admin后台管理用户登录参考的就是auth_user表

2. 导入

   from django.contrib import auth

3. 常用模块方法

# 1.验证用户名和密码是否正确
    """authenticate只能是对 用户名-密码 两个字段进行验证, 别的字段就直接还回,不会验证。------> 源码分析的结果 """
    auth.authenticate(request, name=name, pwd = pwd)             
# 2.保存用户登录状态
    is_obj = auth.authenticate(request, name=name, ped = ped)
    auth.login(request, is_obj)
# 3.获取当前用户对象
    request.user
# 4.判断当前用户是否登录
    request.user.is_authenticated()
# 5.校验登录装饰器
    from django.contrib.auth.decorators import login_required

    # 局部配置 login_url='/lg/'没有登录跳转指定页面 /lg/
        @login_required(login_url='/lg/')

    # 全局配置  需要在配置文件(setting.py)中添加配置
        LOGIN_URL = '/lg/'
        然后函数上面写: @login_required
# 6.修改密码
    #核对密码
         request.user.check_password()
    #修改密码, 两者结合使用
         request.user.set_password()
         request.user.save()
# 7.注销登录
      auth.logout(request)
# 8.注册用户
      from django.contrib.auth.models import User
      User.objects.create_superuser()
      User.objects.create_suser()

4. 参考代码

点击查看代码
from django.contrib import auth
# from django.contrib.auth.models import AbstractUser
def lg(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        '''既然选择使用auth模块  那么就用它的全套功能'''
        # AbstractUser.objects.filter(username=username,password=password)
        is_user_obj = auth.authenticate(request,username=username,password=password)  # 先对密码做加密处理 然后再比对
        # print(res)  # 校验正确返回的是用户对象 错误返回的是None
        if is_user_obj:
            # 记录用户登录状态
            auth.login(request,is_user_obj)  # 自动帮你操作session相关
            return HttpResponse('登录成功')
    return render(request,'lg.html')


def get_user(request):
    print(request.user)  # 获取当前登录的用户对象 或者是 匿名用户
    print(request.user.is_authenticated())  # 判断用户是否登录 返回布尔值
    if request.user.is_authenticated():
        print(request.user.username)
        print(request.user.password)
        print(request.user.last_login)
    return HttpResponse('查看当前用户是否已登录')

from django.contrib.auth.decorators import login_required
# @login_required  # 用户没有登录 默认跳转到/accounts/login/  也可以自定义
# @login_required(login_url='/lg/')  # 局部配置
@login_required  # 采用全局配置
def index(request):
    return HttpResponse("index页面 只有登录的用户才可以查看")
@login_required
def home(request):
    return HttpResponse("home页面 只有登录的用户才可以查看")
@login_required
def func(request):
    return HttpResponse("func页面 只有登录的用户才可以查看")


@login_required
def set_pwd(request):
    if request.method == 'POST':
        old_password = request.POST.get('old_password')
        new_password = request.POST.get('new_password')
        # 1.先比对原密码是否正确
        is_right = request.user.check_password(old_password)  # 自动加密再比对
        if is_right:
            # 2.修改密码
            request.user.set_password(new_password)  # 临时修改密码
            # 3.保存数据
            request.user.save()  # 将修改操作同步到数据库中
    return render(request,'set_pwd.html',locals())

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

from django.contrib.auth.models import User

def register(request):
    # User.objects.create(username='tony',password='123')  # 不能使用create
    # User.objects.create_user(username='oscar',password='123')  # 创建普通用户
    User.objects.create_superuser(username='admin',password='123',email='123@qq.com')  # 创建超级管理员
    return HttpResponse('注册功能')

5. auth扩展表字段

1. models.py文件

from django.contrib.auth.models import AbstractUser      # 导入

class Users(AbstractUser):

    # 编写AbstractUser类中没有的字段 不能冲突!!!'
    phone = models.BigIntegerField()
    addr = models.CharField(max_length=32)
    mobile = models.CharField(max_length=11, unique=True)

    # 需要pillow包的支持 ImageField继承了 FileField只存储图片
    icon = models.ImageField(upload_to='icon', default='icon/default.png')

    class Meta:
        # 指定表名, 不修改的话 --> app名_表名
        db_table = 'luffy_user'

        # 后台管理中显示中文
        verbose_name = '用户表'
        verbose_name_plural = verbose_name

    def __str__(self):                # 打印对象是, 显示用户名
            return self.username

2. setting.py中添加配置

    # Users; 对应数据库的表名
    AUTH_USER_MODEL = 'app01.Users'
posted @ 2023-04-02 17:43  codegjj  阅读(0)  评论(0编辑  收藏  举报