首页 > 其他分享 >Django框架之auth模块

Django框架之auth模块

时间:2024-04-09 19:44:28浏览次数:28  
标签:username request 用户 auth Django user 模块 password

一、引入

在我们创建完Django项目之后,点击urls.py会发现有一个path('admin/', admin.site.urls),的路由,那这个是什么呢?

输入127.0.0.1::8000/admin我们可以看见这个管理员的登录页面

image

那我们没有用户名和密码啊,这怎么登录进去?

所以我们需要创建一个管理员(超级用户),在命令行输入

python manage.py createsuperuser

输完一些信息之后,我们会得到一个管理员账户,那负责这些用户的信息又在哪?

当创建好一个Django项目之后直接执行数据库迁移命令会自动生成很多表,这些表中的auth_user存储的就是我们的用户信息。

Django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且是依赖于auth_user表完成用户相关的所有功能

二、方法总结

1、校验密码是否正确

from django.contrib import auth
# (1) 取到前端输入的用户名和密码
username = request.POST.get('username')
password = request.POST.get('password')
# (2) 进行用户名和密码的校验 ---- 参数必须传用户名和密码
user_obj = auth.authenticate(request, username=username, password=password)


# [1] 用户名和密码正确的情况下
print(user_obj)  
# dream ---- 这是用户对象内部封装的一个方法 __str__ 方法
print(user_obj.username)  
# dream
print(user_obj.password)  
# pbkdf2_sha256$260000$011PbZAjKIWBfAUJ61Rcyn$vNUYq5L70/ljTLEeJ2dBJtDTEKFDTKzFioFPjZYMdU4=

# [2] 用户名和密码不正确的情况下
print(user_obj)  # None ---- 如果数据不符合则返回None

2、保存用户状态

# 判断当前用户是否存在 --- 存在则有值,不存在则返回None
if user_obj:
    # 保存用户状态
    auth.login(request, user_obj)  # 类似于 request.session[key] = user_obj
    # 只要执行了上面的方法,就可以在任何地方通过 request.user 获取当前用户的登录对象

3、判断当前用户是否登录

# 判断用户是否登陆
# 匿名用户返回 False  正常用户返回 True
print(request.user.is_authenticated())  

4、获取当前登录的用户

print(request.user)
# 登陆成功: dream ---- 这是用户对象内部封装的一个方法 __str__ 方法
# 未登录访问: AnonymousUser ---- 匿名用户
# 本质上是自动去django_session里面查找到当前用户对象,然后封装到 request.user 中

5、检验用户是否登录装饰器

from django.contrib.auth.decorators import login_required

# 局部配置
@login_required(login_url='/login/')  # 局部配置:用户没有登录的情况下跳转到login_user后面指定的网址
# 全局配置
@login_required
LOGIN_URL = '/login/
  • 如果全局和局部都有,该听谁的?
    • 局部 > 全局
  • 局部和全局哪个比较好?
    • 全局的好处在于无需重复写代码。但是跳转的页面却很单一
    • 局部的好处在于不同的视图函数在用户没有登录的情况下可以跳转到不同的页面

6、校验原密码

# 校验旧密码是否相同
is_right = request.user.check_password(old_password)  # 内部自己加密密码进行比对
# 返回的结果为  True 或者 False

7、修改密码

# 修改密码
request.user.set_password(confirm_password)  # 仅仅在修改对象的属性
# 修改完密码后进行保存数据
request.user.save()

8、注销登录用户

auth.logout(request)  
# 清空当前登录用户的数据 ----- request.session.flush()

9、注册

# 操作auth_user表写入数据
# 会写入数据,但是保存的密码是明文的,没有加密
User.objects.create(username=username, password=confirm_password) 
# 创建普通用户
User.objects.create_user(username=username, password=confirm_password)
# 创建超级用户 - 了解 --- 使用代码创建超级用户,邮箱和密码是必填的,而用命令创建可以忽略邮箱
User.objects.create_superuser(username=username, password=password,email=email)

三、如何扩展auth_user表

1、方式一(一对一关系 不推荐使用)

from django.db import models
from django.contrib.auth.models import User, AbstractUser


# Create your models here.
# 扩展 auth_user 表
# 第一种方式 : 一对一关系(不推荐)
class UserDetail(models.Model):
    phone = models.CharField(max_length=32)
    user = models.OneToOneField(to='User', on_delete=models.CASCADE)

2、方式二(面向对象的继承)

from django.db import models
from django.contrib.auth.models import User, AbstractUser


class UserInfo(AbstractUser):
"""
如果继承了AbstractUser
那么在执行数据库迁移命令的时候auth_user表就不会再被创建出来了
而UserInfo表中会出现auth_user所有的字段外加自己扩展的字段

这么做的好处在于你能够直接点击自己的表更加快速的完成操作及扩展

前提:
    1.在继承之前没有执行过数据库迁移命令(auth_user没有被创建),如果当前库已经创建了这个表,那么就重新换一个库
    2.继承的类里面不要覆盖AbstractUser里面的字段名
      表里面有的字段都不要动,只扩展额外字段即可
    3.需要再配置问价那种告诉django你要用UserInfo替代auth_user(******)
      AUTH_USER_MODEL = 'app01.UserInfo',不要使用'应用名。models.表名',这是错的
"""
    phone = models.BigIntegerField()

3、注意事项

需要再配置文件中声明 Django 要使用 UserInfo 替代 auth_user

 AUTH_USER_MODEL = 'app01.UserInfo'  ---'应用名.表名'

如果把自己写的表替代了auth_user表,那么auth模块的功能还是照常使用,参考的表也由原来的auth_user编程了UserInfo

标签:username,request,用户,auth,Django,user,模块,password
From: https://www.cnblogs.com/xiao01/p/18124656

相关文章

  • 针对本小组项目遇到的小组成员无法按时提交其负责模块代码问题
    1.建立规则,仪式,流程,模式规定明确的提交截止时间和频率制定明确的代码提交流程,包括提交方式(Git、SVN等)、提交格式要求等。建立一个规范的项目文档,包括代码规范、项目计划、任务分配等,以便所有成员了解自己的职责和时间表。定期组织会议或沟通,确保所有成员都清楚项目进展和各......
  • BOSHIDA DC电源模块的性能评估和比较
    BOSHIDADC电源模块的性能评估和比较DC电源模块是一种常用的电源模块,主要用于提供直流电源给不同的电子设备。在进行性能评估和比较时,可以考虑以下几个方面: 1.输出功率:DC电源模块的输出功率是评估其能否满足所需应用的一个重要指标。通常,输出功率越大,能够提供给设备的电流和......
  • 若依RuoYi-Vue代码生成,新建一个增删改查模块
    启动ruoyi-ui,登录前端后台 以cti_faq问答对表为例。首先在mysql数据库中建张cti_faq表CREATETABLE`cti_faq`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'编号',`question`varchar(255)DEFAULTNULLCOMMENT'问题内容',`answer`textCOMMENT'答案......
  • Django后端如何限制上传文件大小
    在Django中,对上传文件大小进行限制可以通过几种不同的方法来实现。这包括在表单层面、视图层面或通过设置Django项目的全局配置。以下是一些常用的方法:方法1:使用Django设置限制文件大小在Django的settings.py文件中,你可以设置DATA_UPLOAD_MAX_MEMORY_SIZE来限制上传文件的大......
  • python计算机毕设【附源码】基于html的校园网设计与实现(django+mysql+论文)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在信息技术快速发展的今天,互联网已经成为人们获取信息、交流沟通的重要平台。对于学校而言,拥有一个功能齐全、操作简便的校园网系统显得尤为重要。基于HTML......
  • python计算机毕设【附源码】基于MySQL的房屋中介系统(django+mysql+论文)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今社会,房地产市场的繁荣发展使得房屋中介行业成为了连接房东与租户、买家之间的重要桥梁。随着互联网技术的不断进步和普及,传统的房屋中介服务方式已经......
  • Django框架之form组件
    一、前戏需求:写一个注册功能获取用户名和密码,利用form表单提交数据在后端判断用户名和密码是否符合一定的条件用户名不能含有三国演义密码不少于三位1、前端<formaction=""method="post"><p>username:<inputtype="text"name="username"><......
  • Django框架之Cookie和Session
    一、cookie与session的发展史Cookie和Session是Web开发中常用的两种机制,用于在客户端和服务器之间存储和管理用户信息。1、Cookie的发展史:1994年:由Netscape公司的工程师LouMontulli发明。最初的目的是为了解决HTTP协议的状态管理问题,使网站能够在浏览器端存储和读取用户信息......
  • Django框架之分页器使用
    一、问题描述针对上一篇章的批量插入数据,我们会发现一个很严重的问题,将所有数据都放到前端页面展示的时候一千多条数据放在了一页,这样太不方便,就像书本一样,不可能把所有内容都放在一页吧。所以我们可以也想书本一样,尝试做分页处理二、分页推导首先需要明确的是,get请求/post请......
  • Yolov8-pose关键点检测:特征融合 | CAMixing:卷积-注意融合模块和多尺度提取能力 | 202
     ......