Django3中的自定义用户模型实例详解


Posted in Python onAugust 23, 2020

介绍

嗨,在这篇文章中,我们将学习在Django 3中创建自定义用户模型,并且还将更改Django Admin的默认登录功能。 我们将使用电子邮件和密码登录。

动机

我必须为我的应用程序创建一个“自定义用户”,我能够创建模型,但问题是createsuperuser命令无法正常工作。 为了调试它,我不得不做大量研究,问题是当时大多数资源已经过时,所以我决定写这篇文章。

我做了一个GitHub仓库,所以如果您愿意,可以直接使用它(这里有说明)

让我们开始吧

首先,创建一个Django Project并创建一个名为users的应用程序

现在我们可以开始在用户应用程序中编辑models.py文件了

在进行编辑之前,先做一些理论上的准备。

Django中的经理是什么?

Manager是一个接口,通过该接口可以将数据库查询操作提供给Django模型。 Django应用程序中的每个模型至少都有一个Manager。-Django Docs

简单地说,经理为我们提供了一种管理模型的方法。 我们可以通过使模型成为Manager类的子类来实现此目的。 管理器类是可以编辑诸如createsuperuser之类的命令的地方。

现在打开models.py并将以下代码放入其中

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin


class UserManager(BaseUserManager):
 def create_user(self, email, password=None):
  """
  Creates and saves a User with the given email and password.
  """
  if not email:
   raise ValueError('Users must have an email address')

  user = self.model(
   email=self.normalize_email(email),
  )

  user.set_password(password)
  user.save(using=self._db)
  return user

 def create_superuser(self, email, password):
  """
  Creates and saves a superuser with the given email and password.
  """
  user = self.create_user(
   email,
   password=password,
  )
  user.is_staff = True
  user.is_superuser = True
  user.save(using=self._db)
  return user


class CustomUser(AbstractBaseUser, PermissionsMixin):
 name = models.CharField(max_length=50, default='Anonymous')
 email = models.EmailField(max_length=100, unique=True)

 username = None

 USERNAME_FIELD = 'email'
 REQUIRED_FIELDS = []

 session_token = models.CharField(max_length=10, default=0)

 active = models.BooleanField(default=True)
 # a admin user; non super-user
 is_staff = models.BooleanField(default=False)
 is_superuser = models.BooleanField(default=False) # a superuser

 created_at = models.DateTimeField(
  auto_now_add=True, blank=True, null=True)
 updated_at = models.DateTimeField(auto_now=True)

 objects = UserManager()

这里要注意的最重要的事情是is_staff和is_superuser属性。 在其中输入错误可能会导致调试困难。

我们在这里做了什么?

我们已经为我们的用户模型进行了管理。 在其中,我们制作了两个函数,分别称为create_user和create_superuser。
顾名思义,create_user将创建一个新用户,并通过将is_staff和is_superuser设置为true来使用create_superuser创建一个超级用户。

经理之后,我们便有了通常的模式。

我们将用户名设置为none,因为我们不想包含用户名。

其中的USERNAME_FIELD表示我们声明为“电子邮件”。 这应该是唯一的。

session_token是一个可选字段。 我在那里,因为我正在制作我的自定义令牌。

models.py的最后一行指示CustomUser是UserManager的对象。

重要的事情

制作完模型后,打开settings.py文件并在其中添加一行

AUTH_USER_MODEL = 'users.CustomUser'

Django允许您通过为AUTH_USER_MODEL设置提供一个引用自定义模型的值来覆盖默认用户模型。 这条虚线对描述了Django应用程序的名称(必须在您的INSTALLED_APPS中),以及您希望用作用户模型的Django模型的名称。 -Django文档

最后步骤

现在,您可以运行迁移命令并创建超级用户。

py manage.py makemigrations
py manage.py migrate
py manage.py createsuperuser

它将要求您提供电子邮件和密码。 详细说明。

不要忘记在管理员中注册该应用

admin.site.register(CustomUser)

现在,您可以运行服务器并在管理面板中使用您的电子邮件和密码登录。

如果您有任何建议,请告诉我。

git:https://github.com/theshubhagrwl/django_custom_user_app

总结

到此这篇关于Django3中的自定义用户模型的文章就介绍到这了,更多相关Django3自定义用户模型内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
批处理与python代码混合编程的方法
May 19 Python
python字符串的常用操作方法小结
May 21 Python
python机器学习之神经网络(二)
Dec 20 Python
pandas series序列转化为星期几的实例
Apr 11 Python
对python程序内存泄漏调试的记录
Jun 11 Python
使用python serial 获取所有的串口名称的实例
Jul 02 Python
Python3 sys.argv[ ]用法详解
Oct 24 Python
python3中pip3安装出错,找不到SSL的解决方式
Dec 12 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
学生如何注册Pycharm专业版以及pycharm的安装
Sep 24 Python
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
Mar 29 Python
Python用K-means聚类算法进行客户分群的实现
Aug 23 #Python
pandas参数设置的实用小技巧
Aug 23 #Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 #Python
Python tkinter界面实现历史天气查询的示例代码
Aug 23 #Python
套娃式文件夹如何通过Python批量处理
Aug 23 #Python
python进度条显示-tqmd模块的实现示例
Aug 23 #Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 #Python
You might like
PHP4 与 MySQL 数据库操作函数详解
2006/10/09 PHP
php下保存远程图片到本地的办法
2010/08/08 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
Jquery css函数用法(判断标签是否拥有某属性)
2011/05/28 Javascript
js原型链原理看图说明
2012/07/07 Javascript
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
vuex 的简单使用
2018/03/22 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
Python中的面向对象编程详解(上)
2015/04/13 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
路政管理专业个人自荐信范文
2013/11/30 职场文书
女大学生自我鉴定
2013/12/09 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
青年联谊会致辞
2015/07/31 职场文书
Python图片处理之图片裁剪教程
2021/05/27 Python
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript