使用Django身份验证系统

news2024/9/22 17:37:35

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客

《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com)

Django 5框架Web应用开发_夏天又到了的博客-CSDN博客

Django身份验证同时提供身份验证和授权,由于这些功能有些耦合,因此通常称之为身份验证系统。

9.3.1  用户对象介绍

用户对象是身份验证系统的核心,通常代表与网站进行交互的人员,并用于启用类似限制访问权限、注册用户个人资料、将内容与创建者相关联等场景。

Django身份验证系统中仅存在一类用户,即超级用户(Superusers)或管理员用户这类设置了特殊属性的用户对象,而不是不同类的用户对象。默认的用户对象主要包括以下属性:

Username

Password

Email

first_name

last_name

更详细的说明请参阅完整的官方API文档。

9.3.2  创建用户对象

创建用户对象最直接方法就是直接使用用户内置的create_user()函数,具体代码如下:

【代码9-1】

01  >>> from django.contrib.auth.models import User
02  >>> user = User.objects.create_user('king', 'king@email.com', 'kingpwd')
03  # At this point, user is a User object that has already been saved
04  # to the database. You can continue to change its attributes
05  # if you want to change other fields.
06  >>> user.last_name = 'wang'
07  >>> user.save()

【代码分析】

在第01行代码中,通过import关键字引入了User模块。

在第02行代码中,通过create_user()函数创建了一个Users对象的用户user。

在第06行代码中,为用户user定义了last_name属性。

在第07行代码中,调用save()方法保存用户数据信息。

9.3.3  创建超级用户

创建超级用户(superuser)是在命令行中通过createsuperuser命令实现的,具体命令行指令如下:

python manage.py createsuperuser --username=king --email=king@example.com

输入上述指令后,系统将提示用户输入密码,输入完成后将立即创建用户。如果在上述指令中不使用“--username”或“--email”选项,则命令执行过程中将会提示用户输入这些选项值。

9.3.4  更改密码

Django框架不会在用户模型上存储原始(明文)密码,而仅存储一个hash散列密码。因此,请勿尝试直接操作用户的密码属性,这也是创建用户时使用辅助功能的原因。

如果想更改用户密码,主要可以通过以下几种方式:

1. 命令行方式

在命令行中,通过changepassword命令可以更改用户密码,具体命令行指令如下:

python manage.py changepassword --username=king

输入上述指令后,命令执行过程中会提示用户更改给定用户的密码,而且必须重复输入两次(用于校验)。如果两次密码相匹配,则新密码将立即生效。如果指令中不指定用户,则该指令将尝试更改用户名与当前系统用户匹配的密码。

2. 编程方式

我们可以在代码中使用set_password()函数方法,以编程方式更改密码,具体代码如下:

【代码9-2】

01  >>> from django.contrib.auth.models import User
02  >>> u = User.objects.get(username='king')
03  >>> u.set_password('your-new-password')
04  >>> u.save()

3. 管理员系统方式

如果已经安装了Django管理员,则还可以在身份验证系统的管理页面上更改用户的密码。

4. 视图和表单方式

Django框架还提供了视图和表单,用于允许用户更改自己的密码。

9.3.5  验证用户

Django框架使用authenticate()方法来验证一组凭据。关于authenticate()方法的语法说明如下:

authenticate(request=None, **credentials)

该方法在默认情况下使用凭据作为关键字参数、用户名和密码,并针对每个身份验证后端进行检查,如果凭据对后端有效,则返回User对象;如果凭据对于任何后端均无效,或者后端会引发PermissionDenied异常,则返回None。代码示例如下:

【代码9-3】

01  from django.contrib.auth import authenticate
02  user = authenticate(username='king', password='your secret password')
03  if user is not None:
04      # A backend authenticated the credentials
05  else:
06      # No backend authenticated the credentials

request是一个可选的HttpRequest,通过身份验证被传递给后端的authenticate()方法。

9.3.6  默认权限

当在Django项目配置文件中的INSTALLED_APPS设置选项中添加django.contrib.auth模块时,该模块将为已安装的一个应用中定义的模型创建4个默认权限,即添加、更改、删除和查看。

上述4个权限将会在运行python manage.py migrate命令后被创建。将django.contrib.auth模块添加到INSTALLED_APPS设置选项后,第一次运行迁移(migrate)命令时将为所有先前安装的模型以及当时正在安装的所有新模型创建默认权限。然后,在每次运行迁移(migrate)命令时会为新模型创建默认权限。

假定有一个带有App标签名称foo和模型名称Bar的应用程序,如果要测试其基本权限,则应使用如下方法:

add: user.has_perm('foo.add_bar')
change: user.has_perm('foo.change_bar')
delete: user.has_perm('foo.delete_bar')
view: user.has_perm('foo.view_bar')

另外,权限模型很少会被直接访问。

9.3.7  用户组

用户组对象与用户一样,也是身份验证系统的核心。使用django.contrib.auth.models.Group模型是对用户进行分组的通用方法,可以向同一个组内的用户应用权限或其他标签。一个用户可以属于任意数量的用户组。

用户组中的用户会自动拥有授予该组的权限。例如,如果站点编辑器组具有can_edit_home_page权限,则该用户组中的任何用户都将具有该权限。

除了权限之外,用户组是对用户进行分组并为其提供一些标签或扩展功能的便捷方法。例如,可以创建一个“特殊用户”组并编写代码,使其可以访问网站中仅为成员的部分,或向其发送仅为成员的电子邮件。

9.3.8  权限与授权

Django框架带有内置的权限系统,其提供了一种将权限分配给特定用户和用户组的方法。Django权限与授权由后台管理使用,不过也推荐在自己的代码中来使用。Django框架的后台管理使用以下权限:

  • 对视图对象的访问仅限于对该类型对象具有“视图”或“更改”权限的用户。
  • 只有对该对象类型具有“添加”权限的用户,才能查看添加的表单和添加的对象。
  • 只有对该对象类型具有“更改”权限的用户,才能查看更改的列表和更改的对象。
  • 删除对象的权限,仅限于对该对象类型具有“删除”权限的用户。

此外,不仅可以按照对象类型设置权限,还可以按照特定对象实例设置权限。通过使用ModelAdmin模型类提供的has_view_permission()、has_add_permission()、has_change_permission()和has_delete_permission()方法,可以为同一类型的不同对象实例自定义权限。

当用户对象具有两个多对多字段(组和用户权限)时,用户对象可以使用与任何其他Django模型相同的方式来访问其相关对象,代码示例如下:

【代码9-4】

01  myuser.groups.set([group_list])
02  myuser.groups.add(group, group, ...)
03  myuser.groups.remove(group, group, ...)
04  myuser.groups.clear()
05  myuser.user_permissions.set([permission_list])
06  myuser.user_permissions.add(permission, permission, ...)
07  myuser.user_permissions.remove(permission, permission, ...)
08  myuser.user_permissions.clear()

9.3.9  Web请求中的身份验证

Django框架使用会话和中间件将身份验证系统挂接到请求对象(request)中,在代表当前用户的每个请求上提供一个request.user属性。如果当前用户尚未登录,则此属性将设置为AnonymousUser类的实例,否则将是User类的实例。

可以使用is_authenticated属性来进行区分,代码示例如下:

【代码9-5】

01  if request.user.is_authenticated:
02      # Do something for authenticated users.
03      ...
04  else:
05      # Do something for anonymous users.
06      ...

9.3.10  在管理员中管理用户

在Django框架中,如果同时安装了django.contrib.admin和django.contrib.auth模块,那么管理员将提供一种方便的方式来查看和管理用户、组和权限。

此时,可以像创建任何Django模型一样创建和删除用户,还可以创建组,并且可以将权限分配给用户或组。

此外,用户在Django后台管理内进行模型编辑的日志也将被存储和显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2102721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows中Selenium安装最新版Chrome WebDriver

windows中Selenium安装最新版Chrome WebDriver 需求:需要使用 selenium 对某个网页进行截图 文章目录 windows中Selenium安装最新版Chrome WebDriver一、查看Chrome版本二、找到对应的chromedriver版本三 安装3.1 确定google安装路径3.2 将下载的google driver 解压…

解决bug: RuntimeError: Address already in use,一个linux下pytorch多卡训练tcp端口占用的bug

时间:2024.9.3 1)bug: self._store TCPStore( # type: ignore[call-arg] RuntimeError: Address already in use2)原因分析 linux下pytorch多卡训练深度学习模型,训练中途暂停训练,但仍有进程占用某个端…

字典树Trie(专项复习)

一.P8306 【模板】字典树 题目思路:字典树的板子题,熟练写出insert函数(建树),以及query函数(查询)即可. 代码实现: #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; typedef long long ll; #define N 3000005 #define P 131 ll f1[N]; s…

华为云征文|Flexus云服务X实例安装ODBC驱动,在ODBC中建立MySQL数据库连接,通过QT连接云数据库

引出 4核12G-100G-3M规格的Flexus X实例使用测评第2弹&#xff1a;Flexus云服务X实例安装ODBC驱动&#xff0c;在ODBC中建立MySQL数据库连接&#xff0c;通过QT连接云数据库 什么是Flexus云服务器X实例 官方解释&#xff1a; Flexus云服务器X实例是新一代面向中小企业和开发…

第140天:内网安全-横向移动局域网ARP欺骗DNS劫持钓鱼中间人单双向

目录 案例一&#xff1a;局域网&工作组-ARP原理-断网限制-单向 案例二&#xff1a;局域网&工作组-ARP欺骗-劫持数据-双向 案例三&#xff1a;局域网&工作组-DNS 劫持-钓鱼渗透-双向 案例一&#xff1a;局域网&工作组-ARP原理-断网限制-单向 原理&#xff1…

pytorch利用简单CNN实现葡萄病虫害图片识别

1 前言 之前我开发了一个葡萄病虫害的可视化系统&#xff0c;最近就想给这个系统增加2个功能&#xff0c;一个是对接一个AI助手&#xff0c;可以进行葡萄病虫害的咨询&#xff0c;直接对接千问大模型&#xff0c;这个在之前的博文里已经介绍过对接方法了&#xff0c;第二个是做…

ChatGPT与R语言融合技术在生态环境数据统计分析、绘图、模型中的实践与进阶应用

自2022年GPT&#xff08;Generative Pre-trained Transformer&#xff09;大语言模型的发布以来&#xff0c;它以其卓越的自然语言处理能力和广泛的应用潜力&#xff0c;在学术界和工业界掀起了一场革命。在短短一年多的时间里&#xff0c;GPT已经在多个领域展现出其独特的价值…

【JavaWeb】JDBCDruidTomcat入门使用

本章使用技术版本&#xff1a; Tomcatv10.1.25 关于javaweb相关的其他技术&#xff0c;比如tomcat和maven&#xff0c;在我的主页记录了笔记&#xff0c;ajax我用的是本地笔记以后再考虑上传&#xff0c;前端三板斧我用的菜鸟教程文档 JDBC 初识 JDBC概念 JDBC 就是使用Jav…

MatLab基础学习01

MatLab基础学习01 1.基础入门2.MatLab的数据类型2.1数字2.2字符串2.3矩阵2.4.元胞数组2.5结构体 3.MatLab的矩阵的操作3.1矩阵定义与构造3.2矩阵的下标取值 4.MatLab的逻辑流程4. For循环结构4.2 While循环&#xff0c;当条件成立的时候进行循环4.3 IF end 1.基础入门 matlba必…

1.3 SQL注入之MYSQL系统库

一.系统库释义 提供了访问数据库元数据的方式 元数据是关于数据库的数据&#xff0c;如数据库名和表名&#xff0c;列的数据类型或访问权限。 1.information_schema 库&#xff1a;是信息数据库&#xff0c;其中保存着关于MySQL服务器所维护的所有其他数据库的信息&#xff1…

公园智能厕所引导大屏,清楚显示厕位有无人状态

在科技飞速发展的今天&#xff0c;公园的设施也在不断与时俱进。其中&#xff0c;公园智能厕所引导大屏的出现&#xff0c;为游客带来了全新的如厕体验。 走进公园的智能厕所区域&#xff0c;首先映入眼帘的便是那醒目的引导大屏。屏幕上清晰地显示着各个厕位的有无人状态&…

如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取

背景介绍 在现代网页开发中&#xff0c;HTML结构往往非常复杂&#xff0c;包含大量嵌套的标签和动态内容。这给爬虫技术带来了不小的挑战&#xff0c;尤其是在需要精确提取特定数据的场景下。传统的解析库可能无法有效处理这些复杂的结构&#xff0c;而JavaScript环境下的Chee…

机器学习(五) -- 监督学习(8) --神经网络2

机器学习系列文章目录及序言深度学习系列文章目录及序言 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;8&#xff09; --神经网络1 下篇&#xff1a; 前言 tips&#xff1a;标题前有“***”的内容为补充内容&#xff0c;是给好奇心重的宝宝看…

Fast Vision Transformers with HiLo Attention

总结 提出了 HiLo Attention 机制&#xff1a; 该机制将自注意力层分为两部分&#xff1a;Hi-Fi&#xff08;高频注意力&#xff09; 和 Lo-Fi&#xff08;低频注意力&#xff09;。Hi-Fi 捕捉局部细节&#xff0c;通过在局部窗口内应用自注意力&#xff0c;减少了计算复杂度…

图文解析保姆级教程:Tomcat下载、安装、卸载、启动、关闭,解决窗口闪退问题、端口号冲突问题

文章目录 1. 下载2. 安装与卸载3. 启动与关闭4. 常见问题问题1&#xff1a;Tomcat启动时&#xff0c;窗口一闪而过问题2&#xff1a;端口号冲突&#xff08;Tomcat使用的端口被占用&#xff09; 此教程摘选自我的笔记&#xff1a;黑马JavaWeb开发笔记14——Tomcat&#xff08;介…

linux进程处理

1.测试这样没意义&#xff0c;要向后加 wait等待进程结束 1. 2.测试 发送异常结束的信号&#xff0c;通过kill 二、子进程的回收 对于子进程的结束而言&#xff0c;都希望父进程能够知道并作出一定的反应&#xff0c;通过 wait、waitpid 函数可以知道子进程是如何结束的…

人工智能训练师边缘计算实训室解决方案

一、引言 随着物联网&#xff08;IoT&#xff09;、大数据、人工智能&#xff08;AI&#xff09;等技术的飞速发展&#xff0c;计算需求日益复杂和多样化。传统的云计算模式虽在一定程度上满足了这些需求&#xff0c;但在处理海量数据、保障实时性与安全性、提升计算效率等方面…

使用VM创建centos7环境

1、安装VMware Workstation 1.1安装VMware Workstation pro 16 修改自己的安装位置 一直下一步到 1.2激活VMware Workstation pro 16 点击许可证 解压这个压缩包&#xff0c;密码是ai95 之后找到下面文件打开 将生成的许可证码输入到安装VMware Workstation pro 16完成安…

gitk无法打开

1、电脑重装&#xff0c;重新安装git工具后&#xff0c;发现无法打开现有的仓库&#xff0c;报错如下&#xff1a; 搜索网上的信息&#xff0c;显示是目录下没有.git文件夹&#xff0c;但是在xshell查看文件夹是存在的。 然后进行测试git log指令发现也无法进行显示。 然后按…

OJ习题 篇2

&#x1f680;个人主页&#xff1a;奋斗的小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 &#x1f4a5;1、删除有序数组中的重复项&#x1f4a5;2、数组中出现次数超过一半的数字&#x1f4a5;3、最…