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

auth认证模块

时间:2022-12-28 19:57:03浏览次数:37  
标签:登录 request auth 认证 user 模块 login

auth介绍

auth模块可以帮助我们很快的搭建用户相关的功能 注册登录修改密码等

也可以使用该模块设置django管理员账号密码(django自带一个admin路由,需要我们提供管理员账号和密码)

auth自带一个auth_user数据表 当你执行过数据库迁移命令后自动创建。默认也有很多字段。

2987404-20221223180120630-2037439617

有些字段的含义如下:

  • password:密文的密码
  • last_login:上次登录时间
  • is_superuser:是管理员就存1,普通用户就存0
  • username:用户名
  • data_joined:注册时间

如何创造管理员

在pycharm命令行中执行

python3.8 manage.py createsuperuser

# 然后会提示我们输入用户名,邮箱(选填),密码等信息,依次输入即可后。
# auth_user表中就会添加一条数据,这条数据就是管理员用户信息。

基于auth模块完成注册

如果想要使用auth相关操作必须导入模块

from django.contrib.auth.models import User
# 导入auth相关的表 不导入的话 models找不到这个表
from django.contrib import auth
# 导入该模块

1.验证账号是否已存在
user_obj = User.objects.filter(username=username)
.first()
# 常规方法 查询该表中是否有该账户 有了则返回用户名已存在

2.通过校验录入数据
User.objects.create_user(username=username, password=password)
# 表名.objects.create_user方法 把需要录入的数据放进去
# 必须要用create_user方法
# 通过这个方法录入的密码才会自动加密

基于auth模块完成登录

from django.contrib.auth.models import User
# 导入auth相关的表 不导入的话 models找不到这个表
from django.contrib import auth
# 导入该模块


1.判断用户名是否存在
user_obj = User.objects.filter(username=username)
.first()
# 常规方法 查询该表中是否有该账户 有了则进行下面操作 没有则返回用户名错误

2.判断账号密码是否正确
user_obj = auth.authenticate(request,username=username,
password=password) 
# 必须使用auth模块方法,如果用户名和密码正确则返回 用户对象
# 用户名或密码错误的话返回none

3.用户名密码正确 返回 session给客户端
auth.login(request,user_obj)
# 会自动操作django  session表
# 登录成功

4.获取已登录后对象数据
  user_obj = request.user

判断用户是否登录

后端:
  判断用户是否登录
	res = request.user.is_authenticated
  # 如果已登录返回true 未登录则返回false
  
  
前端:

{% if request.user.is_authenticated  %}
   # 已登录则结果未true 未登录则返回false
   # 如果是已登录则展示用户名
      <p>{{ request.user.username }}</p>
{% else %}
      <a href=''>登录</a>
      <a href=''>注册</a>
{% endif %}

校验是否登录装饰器

直接导入装饰器即可不用自己写

from django.contrib.auth.decorators import login_required
# 导入校验用户是否登录装饰器

@login_required(login_url='/login/')
def home(request):
  pass

# 直接装上,并手动设置 为登录跳转到哪个路由

全局配置未登录跳转路由地址

在配置文件中添加代码
LOGIN_URL = '/login/'
设置好以后再使用这个装饰器就不用单独设定路由了
@login_required
即可

基于auth模块完成修改密码

1.先校验原密码是否正确(必须是用户已登录)
request.user 可以获取用户对象

res = request.user.check_password(原密码)
# 如果原密码正确 返回true  不正确返回 false



2.原密码正确后修改为新密码
	request.user.set_password(新密码)
  request.user.save()
  
  # 修改后必须要保存 所有2个代码都要执行 这样就自动在表格中完成修改

基于auth模块完成退出登录


@login_required(login_url='/login/')
def logout(request):
  auth.logout(request)
  
# 执行auth模块中.logout方法即可

# 会自动退出当前用户,并删除session 完成注销登录

扩展auth_user表

django提供给我们的auth模块固然很好用,但是auth_user表中的字段定死了,显然无法满足我们的业务需求,实际上考虑到这个,我们也可以对auth_user进行改造。

查看源码,User模型类实际上里面什么都没写,而是继承了AbstractUser,这个模型类中定义了我们上文提到的字段。所以我们想要拓展表,只需要继承AbstractUser创建一个模型表,添加我们想要添加的字段即可。

系统自带的auth_user表格中 没有手机号 个人信息等字段
我们如何在该表格基础上添加字段呢


替换auth_user表
我们自己在模型层编写一个表,然后继承auth_user的方法和原有字段
模型层编写模型类继承AbstractUser
from django.contrib.auth.models import AbstractUser
# 一定要继承这个模块 否则无效


第一步:

class UserInfo(AbstractUser):
    # 然后在里面添加原本表中没有的字段即可
    phone =     username = models.CharField(max_length=16,null=True,default='未填写')

    desc = models.TextField(null=True,default='空')

    
    
第二步:
   设置完自己的表后 再配置文件中要声明替换关系
   setting.py中
    
   AUTH_USER_MODEL = 'app01.UserInfo'
  
  
ps:替换还有一个前提 就是数据库迁移没有执行过,必须是全新的数据库

标签:登录,request,auth,认证,user,模块,login
From: https://www.cnblogs.com/moongodnnn/p/17011142.html

相关文章

  • 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工具有哪些模块?
    随着美颜工具的进一步发展,传统的原相机拍摄已经被无情“打入冷宫”,当下用户的拍摄习惯已经发生了翻天覆地的变化,无论是在互联网社交平台还是日常的拍摄,使用美颜拍照已经成了......
  • string 模块
    string模块简单分析字符串常量点击查看代码whitespace='\t\n\r\v\f'#空白字符ascii_lowercase='abcdefghijklmnopqrstuvwxyz'#全英文小写ascii_uppercas......