首页 > 其他分享 >Django用户模块

Django用户模块

时间:2023-01-14 22:12:39浏览次数:42  
标签:get UserManager 用户 ORM User 模块 Django 源码

Django 作为一个成熟的 Web 框架,其本身就自带一套 User 模型。具体的源码位置在 django.contrib.auth.models 文件中的 class User(AbstractUser)。如果我们深入探究源码,就会发现 User 类的继承路径如下:img
在 Django 自带的用户模型,已经封装好了很多常用功能,例如 User 模型里面的变量有 username, first_name, last_name, email, is_staff, is_active, date_joined, objects 等;还有一些常用的方法,只不过 Django 将这些方法都封装到了 AbstractUser 的父类 AbstractBaseUser 中,这些方法有 save(), get_username(), set_password(), check_password(), set_unusable_password(), get_email_field_name(), get_session_auth_hash() 等。至于这些变量和方法是干什么用的,你可以很直观的从它们的名字上面得到结果。
Django 框架有个最厉害的地方就是它的 ORM 框架。ORM 是 Object Relational Mapping 的缩写,翻译过来是 关系对象映射。其作用是根据代码会自动生成数据库表格,并且会根据 Django 对接的数据库引擎,将所有关于数据库操作的代码翻译成对应的 sql 语句,这样就使得 Django 的开发者无需关心程序底层使用的是哪一款数据库,应该怎么配置对接等等,只需要将开发精力放到业务逻辑即可。

User 模型里的 ORM

在 AbstractUser 类的源码中,有一个 objects = UserManager()。 没错,这个 objects 就是我们上面提到的 ORM 。一般的 ORM 操作,比如要寻找 id 为 1888 的用户,代码如下

user = User.objects.get(id="1888")

这里 get() 方法返回的是一个 QuerySet 类,这个当然是 Django ORM 的另一个大特色:懒加载。只有当 QuerySet 在 迭代, 切片操作, 调用 len() 函数, 调用 list() 函数进行转化 和 条件判断 的时候, QuerySet 才会被翻译成 SQL 语句执行。

其次,我们可以看到, User 模型里的 ORM 主要是通过调用其内部的 objects 变量的方法,也就是 UserManager 的方法来实现的。如果我们追踪 UserManager 源码就会发现,它的整个继承路径如下:img

在 UserManager 类中,可以看到有这些方法 create_user(), create_superuser() 。 在其父类 BaseUserManager 中,可以看到有 normalize_email() 方法,用来规范输入的邮件地址。

所以,在分析完 Django User 源码之后,我们可以得出结论:如果要实现自定义 Django 用户系统,那么首先得创建一个类,这个类必须继承 AbstractBaseUser 和 PermissionsMixin 类。同时,还得实现自定义的 UserManager,这个 UserManager 需要继承自 BaseUserManager 类。

标签:get,UserManager,用户,ORM,User,模块,Django,源码
From: https://www.cnblogs.com/lazarus235/p/17052659.html

相关文章

  • Django请求的生命周期
    我们先来简单介绍一下Django是如何处理网络请求的。所有的网络请求,都是从Request开始,以Response结束。Django的作用就是把来自客户端的Request经过处理,返回Respo......
  • 2023 射频培训-以模块划分
    射频培训-以模块划分源SourcePLL频率合成器——e.g.ADF4351DDS频率合成器——e.g.AD99599854TxDACLC谐振网,用于第一中频FM发生、解调电路多谐振荡器OCXO-......
  • python模块之beautifulsoup —— html文件解析以及提取
    python模块之beautifulsoup——html文件解析以及提取beautifulsoup简称bs4,能够帮助我们处理html等超标记文本的标签,提取其中的文字,常用于爬虫领域等。bs4及相关模块......
  • 自定义用户登录验证
    1.自定义用户登录验证把自带的登录逻辑改写以及界面的改写1.1UserDetailServiceImpl@ServicepublicclassUserDetailServiceImplimplementsUserDetailsService{......
  • http模块
                     ......
  • 【ASP.NET Core】按用户角色授权
    上次老周和大伙伴们分享了有关按用户Level授权的技巧,本文咱们聊聊以用户角色来授权的事。按用户角色授权其实更好弄,毕竟这个功能是内部集成的,多数场景下我们不需要扩展,不......
  • 文件相关信息,时间相关操作,定时任务,paramiko模块
    文件相关信息查看文件大小与删除大文件#查看普通⽂件⼤⼩⽅法[root@jason/tmp]#ls-lh/etc/services#查看⽬录⽂件⼤⼩⽅法du显示⽬录中的数据真实占⽤磁盘......
  • ⽹络不通排查流程,各个目录下的重要文件,文件权限及用户、用户组情况
    ⽹络不通排查流程1.确认⽹关地址是否通畅2.确认⽹卡配置是否正确3.确认⽹络管理服务关闭systemctlstopNetworkManagersystemctldisableNetworkMana......
  • Netty-核心模块组件-4
    Netty核心模块组件一、Bootstrap、ServerBootstrap1、Bootstrap意思是引导,一个Netty应用通常由一个Bootstrap开始,主要作用是配置整个Netty程序,串联各个组件Netty......
  • Django-scrapy图书爬取分析展示系统
    Django-scrapy图书爬取分析展示系统pythonDjango-scrapy图书数据分析展示系统pythonDjangoscrapy数据爬取系统pythonDjango数据分析系统后端:scrapy获取图书数据......