首页 > 其他分享 >auth认证模块

auth认证模块

时间:2022-12-28 20:14:23浏览次数:51  
标签:username request auth 认证 pwd user 模块 password

  • auth认证模块

  • auth认证相关模块及操作

  • 扩展auth_user表

auth认证模块

django自带一个admin路由 但需要我们自己填写管理员账号和密码 如果想要使用admin后台管理 需要先创建表 然后创建管理员账号
直接执行数据库迁移命令即可产生默认的auth_user表 该表就是admin后台管理默认的认证表
    python39 manage.py makemigrations
    python39 manage.py migrate

# 创建超级管理员
     python39 manage.py createsuperuser

# 基于auth_user表编写用户相关的各项功能
      登录、校验用户是否登录、修改密码、注销登录等

auth认证相关模块及操作

# 导入auth模块
from django.contrib import auth
# 导入User表
from django.contrib.auth.models import User
  • 用户注册功能
# 查看表中是否已有该用户(包括管理员)(拿到的结果是一个queryset或None):
  res = User.objects.filter(username=username)
# 创建用户:(密码密文保存)
  User.objects.create_user(username=username,password=password)

    
    '''views.py'''    
def register_func(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        con_pwd = request.POST.get('con_pwd')
        if not password == con_pwd:
            return HttpResponse('两次密码不一致')
        # 1.校验用户名是否存在
        res = User.objects.filter(username=username)
        if res:
            return HttpResponse('用户名已存在')
        # 2.注册该用户
        # User.objects.create(username=username, password=password)  # create方法不行 密码不加密
        User.objects.create_user(username=username, password=password)  # create_user方法会自动对密码加密
    return render(request, 'registerPage.html')

image

  • 用户登陆功能
# 判断用户名和密码是否正确(用户名和密码正确了之后返回的是数据对象 不正确则返回none)
user_obj = auth.authenticate(request, username=username, password=password)
# 用户登陆成功(返回给客户端登陆的凭证、令牌、随机字符串)自动操作django_session表
auth.login(request, user_obj)


    '''views.py'''
def login_func(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 1.校验用户名和密码是否正确(不分开校验) 自己无法比对密码 必须要使用auth模块提供的方法
        user_obj = auth.authenticate(request, username=username, password=password)  # 用户名和密码正确了之后返回的是数据对象 不正确则返回none
        if user_obj:
            # 2.用户登陆成功(返回给客户端登陆的凭证、令牌、随机字符串)
            auth.login(request, user_obj)  # 自动操作django_session表
            '''
            当执行完上述操作之后 我们就可以通过request.user直接获取当前登陆用户的对象数据
            '''
            return HttpResponse(f'{username}登陆成功')
    return render(request, 'loginPage.html')    

image

image

  • 模拟博客园效果
我们可以使用request.user来查看登陆的用户是谁,如果已登录,那么print(request.user)的结果就是用户名,未登录就是AnonymousUser

同样我们也可以用request.user.is_authenticated将是否登陆用布尔值表示:如果已有用户登录,print(request.user.is_authenticated)结果是True,未登录则是Flase

模拟博客园效果:当用户登陆时,展示用户的姓名,当用户未登录时,展示的是注册和登陆两个标签
    
        '''views.py'''
def home_func(request):
    return render(request, 'homePage.html', locals())

        '''homePage.html'''
<body>
    {% if request.user.is_authenticated %}
        <h1>{{ request.user.username }}</h1>
    {% else %}
        <a href="">注册</a>
        <a href="">登陆</a>
    {% endif %}
</body>    

image

image

  • 校验用户是否登陆装饰器
如果某个页面只有登录之后才能查看,根据昨天学习的内容我们可以写一个装饰器并且在路由后面加一个问号再加一个键值对来表示本来想要访问的页面。在auth模块中这些内容都已被封装好
首先导入模块:
from django.contrib.auth.decorators import login_required


# 局部
如果登录页面的路由和我们制定的不一样,我们可以在括号内指定登陆路由:
@login_required(login_url='/login/') #可以明确指定用户没有登陆之后跳转到哪个网址
def index_func(request):
    return HttpResponse('index页面,只有登录才能查看')


# 全局
如果很多个函数的登陆路由都一样,那么我们可以直接在setting.py中写:
LOGIN_URL = '/login/'
在视图函数中就无须重复指定登陆路由:只要被该装饰器装饰的函数没有登陆之前都会跳转到指定登陆的页面
@login_required
def index_func(request):
    return HttpResponse('index页面,只有登录才能查看')

image

  • 修改密码
# 判断原密码是否正确
request.user.check_password(old_pwd)
# 修改密码
request.user.set_password(new_pwd)
request.user.save()

       '''views.py'''
@login_required  # 修改密码之前必须要获取是哪个用户,所以要先登录
def set_pwd_func(request):
    if request.method == 'POST':
        old_pwd = request.POST.get('old_pwd')
        new_pwd = request.POST.get('new_pwd')
        confirm_pwd = request.POST.get('confirm_pwd')
        if not confirm_pwd == new_pwd:
            return HttpResponse('两次密码不一致')
        # 1.判断原密码是否正确
        is_right = request.user.check_password(old_pwd)
        if not is_right:
            return HttpResponse('原密码不正确')
        # 2.修改密码
        request.user.set_password(new_pwd)
        request.user.save()  # 一定要保存 否则不会修改
    return render(request, 'setPwdPage.html')    

image

  • 退出登录
# 退出登录
    auth.logout(request)可以自动将sessioon表中的对应关系删除
    
    '''views.py'''
@login_required
def logout_func(request):
    auth.logout(request)
    return HttpResponse('成功退出登录')

扩展auth_user表

还想使用auth模块的功能 并且又想扩展auth_user表的字段

方法1: 编写一对一表关系
    
方法2:类继承(推荐)
    步骤1:模型层编写模型类继承AbstractUser
   	from django.contrib.auth.models import AbstractUser class
    UserInfo(AbstractUser):
    # 填写AbstractUser表中没有的字段
    phone = models.BigIntegerField()
    desc = models.TextField()

    步骤2:一定要在配置文件中声明替换关系
    AUTH_USER_MODEL = 'app01.UserInfo'

ps:替换还有一个前提 就是数据库迁移没有执行过(auth相关表没有创建)

标签:username,request,auth,认证,pwd,user,模块,password
From: https://www.cnblogs.com/super-xz/p/17011168.html

相关文章

  • auth认证模块
    auth介绍auth模块可以帮助我们很快的搭建用户相关的功能注册登录修改密码等也可以使用该模块设置django管理员账号密码(django自带一个admin路由,需要我们提供管理员账号......
  • auth认证模块
    目录auth认证模块auth认证相关模块及操作扩展auth_user表auth认证模块django自带一个admin路由,但是需要我们提供管理员账户和密码,如果想要使用admin后台管理,需要先创建表......
  • 研发思维07----嵌入式智能产品安全认证必要经过
    目录​​前言​​​​一、为什么需要进行产品认证?​​​​二、不同地区有哪类型产品认证?​​​​2.1常见标准认证​​​​2.2网络类相关标准​​​​2.3医疗类标准​​​......
  • 使用Python的asyncio模块异步下载整站壁纸
    这篇文章主要给大家介绍关于Python中asyncio模块的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学......
  • django 自带auth模块 实现 用户 注册、登录、验证、注销
    Auth模块只要是跟用户相关的登陆、注册、校验、修改密码、注销、验证用户是否登陆 内容详细Auth模块"""其实我们在创建好一个django项目之后直接执行数据库迁移......
  • python模块之psutil详解
     一、psutil模块:1.psutil是一个跨平台库(​​http://pythonhosted.org/psutil/​​)能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主......
  • asp.netcore Authentication, schema
    1. code likethiswillreporterror:  builder.Services.AddAuthentication("dd").AddCookie("ddd");builder.Services.AddAuthorization();InvalidOperationE......
  • 华普物联HP-AIOCAT-244电力配网自动化无线传输系统 CAT1/4G网络远程IO控制器RS485转C
    电网建设繁杂庞大,时间跨度大,各种新老设备共存,很多电网架构已经不适用当今社会发展的需求。现如今改善电能质量从源头上来说就是将电网改造与新电网建设结合起来。对于新建......
  • 华普物联HP-AIOCAT-244 CAT1/4G网络远程IO控制器 石油勘探无线远程监控系统RS485转CAT
    油田油井数量多且分布范围由几十至上百平方公里不等,分布比较零散。目前大多采用人工巡井方式,由人工每日定时检查设备运行情况并记录采油数据。这种方式必然增加工人劳动强......
  • 视频美颜SDK是什么?美颜SDK工具有哪些模块?
    随着美颜工具的进一步发展,传统的原相机拍摄已经被无情“打入冷宫”,当下用户的拍摄习惯已经发生了翻天覆地的变化,无论是在互联网社交平台还是日常的拍摄,使用美颜拍照已经成了......