auth认证模块

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:替换还有一个前提 就是数据库迁移没有执行过,必须是全新的数据库
posted @   Python-moon  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示