Django——Auth模块(python)

ops/2024/9/23 14:31:16/

#前言:

本文主要介绍了关于Django中Auth模块的实现,如若各位大佬发现错误或者需要添加的内容,欢迎各位指正,最后我后续还会继续更新关于Django的一些基本内容,欢迎大家关注。

一、简介:

“Auth”模块是指“authentication(身份验证)”模块,用于验证用户身份和控制用户访问权限。在软件开发中,身份验证是确保用户是其所声称的身份的过程,以及在确认其身份后控制其可以访问的资源和操作。

首先我们要清楚,Auth 用户认证 , 本质上是设置 Session。

Django 认证系统同时处理认证和授权:
    认证:验证一个用户是否为 Django 声明,如果是可以进行登录或者访问
    授权:决定一个已经验证的用户有哪些功能是允许操作。

在 Django 迁移数据库的是时候会自动生成一张用户认证表:auth_user , 存放用户的基本信息(用户名 , 密码 , 邮箱……)证的用户有哪些功能是允许操作。

二、扩建auth_user 表:

在 Django 迁移数据库的是时候会自动生成一张用户认证表:auth_user , 存放用户的基本信息(用户名 , 密码 , 邮箱……)证的用户有哪些功能是允许操作。扩建auth_user 表,实际上就是扩建 auth_user 表中的字段数据。

方式一:
    创建一对一,绑定 auth_user 表(不推荐)。

方式二:继承AbstractUser
在定义模型类的时候继承 AbstractUser 类,进行数据迁移的时候不会生成 auth_user , 原有的 auth_user 中的所有字典就会继承到自定义的模型类中。
实现字段的扩建,直接在自定义模型类中添加额外的新字段即可。

python">from django.contrib.auth.models import AbstractUserclass User(AbstractUser):# 添加额外的字段mobile = models.CharField(max_length=11)class Meta:db_table = 'UserInfo'

扩建 auth_user 表的前提:
    1、在实现扩建的时候 ,不允许,不能先执行迁移数据库(如果已经迁移过数据库,就换一个新的数据库)。
    2、在扩建中,只能添加字段 , 不能修改或者删除原有字段。

三、重新配置 auth 认证模型类:

在setting.py文件中:

python"># 配置自定义的认证模型类
# AUTH_USER_MODEL = '应用名称.模型类'
AUTH_USER_MODEL = 'AuthApp.User'

四、操作实现:

关于Auth的操作,我们主要是为了实现当我们用户未曾登录访问网站时,进去主页后有一些操作页面必须是在登录状态才可以实现的。所以若是未登录,要点击这些操作则重定向到指定页面(比如登录页面),若是登录则正常访问。

1、前期准备:

在实现操作前我们先创建几个前端页面(这里就不展示了),分别为register.html 注册页面,login.html 登录页面,index.html 主页面。

2、设置注册视图类:

注意:在我们正常将数据传输给数据库时,我们的数据都是可以看到的,而我们这里用create_user方法将数据加密保存到数据库当中,这是Auth模块的关键

python">class RegisterView(View):def get(self , request):return render(request , 'register.html')def post(self , request):username = request.POST.get("username")password = request.POST.get("password")email = request.POST.get("email")mobile = request.POST.get("mobile")'''create:保存用户数据,密码不加密create_user:密码加密'''User.objects.create_user(username=username , password=password , email=email , mobile=mobile)return redirect('/login/')

3、设置登录视图类:

因为我们上述注册的数据是加密保存到数据库当中的,所以当我们要查这个数据时,就不用常规查找,而是用Auth模块,既authenticate ,它负责加密后认证用户信息,用户存在返回用户数据 , 用户不存在返回 None。

而我们要保存用户登陆状态就用:login方法。

python">class LoginView(View):def get(self , request):return render(request , 'login.html')def post(self , request):username = request.POST.get("username")password = request.POST.get("password")# authenticate 认证用户信息,用户存在返回用户数据 , 用户不存在返回 Noneuser = authenticate(username=username , password=password)if not user:return render(request , 'login.html' , {'error_message':'用户名或者密码错误'})# login 保持用户登录状态# 在请求中能够获取到用户信息,说明用户是登录的 , 否则就没有登录login(request , user)next = request.GET.get('next')if next:return redirect(next)else:return redirect('/index/')

4、重定向过程:

注:我的设计意图是在前端页面有两个a标签,一个是购物车(必须在登陆状态才可以进),另外一个是退出。

使用修饰器:

@login_required  用户验证登录的装饰器
使用的时候需要配置局部的重定向 url
@login_required(login_url='/login/')

python">@login_required(login_url='/login/')
def cart(request):return HttpResponse("<h1>购物车页面</h1>")
@login_required(login_url='/login/')
#注销用户信息:
def logoutview(request):logout(request)return redirect('/login/')

若是不想在装饰器后面添加重定向 url 参数,就可以在setting.py中配置全局:

python">#配置全局
LOGIN_URL='/login/'

五、总结:


该篇博客介绍了Django的Auth模块及其操作,如若各位大佬发现问题或者需要补充的地方,欢迎指正,后续我还会继续更新关于Django的其它内容,欢迎大家关注我等后续更新,您的关注和点赞将是我变强的最大动力。


http://www.ppmy.cn/ops/45690.html

相关文章

【git】拉取pull 和 获取 fetch的区别

【git】拉取pull 和 获取 fetch的区别 git pull 和 git fetch 都是 Git 中用于获取远程仓库更新的命令&#xff0c;但它们之间有一些关键区别&#xff1a; 1.git pull &#xff1a; git pull 是一个组合命令&#xff0c;它首先执行 git fetch 以获取远程仓库的最新更改&…

使用PyAutoGUI识别PNG图像并自动点击按钮

在自动化测试、任务批处理等场景中,我们常常需要控制GUI程序的鼠标键盘操作。PyAutoGUI就是一个非常方便的Python模块,可以帮助我们实现这些操作。今天我们就来看看如何使用PyAutoGUI识别屏幕上的PNG图像,并自动点击图像所在位置。 C:\pythoncode\new\autoguirecongnizepng.py …

【WP|5】WordPress 插件开发详解

WordPress 插件是一种扩展 WordPress 功能的方法&#xff0c;开发插件不仅能增强网站的功能性&#xff0c;还能提供给其他用户使用。本文将详细讲解 WordPress 插件开发的基本步骤和一些高级技巧&#xff0c;帮助你从零开始创建一个功能强大的插件。 一、插件开发的基础 1. 插…

【模型架构】学习RNN、LSTM、TextCNN和Transformer以及PyTorch代码实现

一、前言 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;模型架构的不断发展极大地推动了技术的进步。从早期的循环神经网络&#xff08;RNN&#xff09;到长短期记忆网络&#xff08;LSTM&#xff09;、Transformer再到当下火热的Mamba&#xff08;放在下一节&a…

SD6210A 低噪声恒定频率开关电容调节输出电流2.8V-5VSOT-23封装

该SD6210A是一种低噪声&#xff0c;恒定频率(1.20MHz )开关电容电压倍增器。它产生一个调节输出电 压从2.8V到5V的输入高达250mA的输出电流。低 外部零件数(一个飞行电容器和两个小旁路电容 铝VIN和VOUT)使SD6210A非常适合小型&#xff0c;电池 供电的应用 新的电荷泵架构保持恒…

连锁收银系统的五大功能 会员营销是核心

连锁企业的收银系统是其经营管理的关键工具之一&#xff0c;具备多种功能可以帮助企业提高效率、优化服务并实现会员营销。以下是连锁收银系统的五大功能&#xff0c;其中会员营销作为核心功能将在最后详细讨论。 首先&#xff0c;收银系统应具备高效的销售管理功能。这包括商品…

COMSOL中液晶材料光学特性模拟

前面我们根据FDTD官方文档设置了液晶指向的模型。COMSOL也可以根据相似的方法设置各项异性的周期性变化的材料。 该方法参考了luneburg_lens的COMSOL文档 在给出的文件中&#xff0c;可以发现定义-变量中可以使用默认坐标作为变量&#xff0c;即xyz。因此&#xff0c;折射率也可…

Rust的高效易用日志库—tklog

很多人习惯于python&#xff0c;go等语言基础工具库的简单易用&#xff1b;在使用rust时&#xff0c;可能感觉比较麻烦&#xff0c;类似日志库这样的基础性工具库。tklog提供用法上&#xff0c;非常类似python等Logger的日志库用法&#xff0c;用法简洁&#xff1b;基于rust的高…