当前位置: 首页 > news >正文

低功耗集成主板做网站太原高端网站建设

低功耗集成主板做网站,太原高端网站建设,免费空间建网站,丁香花影视大全前言 自定义用户模型在Django应用中是一个重要的话题#xff0c;它涉及到如何根据您的项目需求以及特定的用户身份验证和授权需求来调整用户模型。在以下前言中#xff0c;我将讲述为什么自定义用户模型是如此重要以及其潜在的优势#xff1a; 随着Web应用的不断发展…前言 自定义用户模型在Django应用中是一个重要的话题它涉及到如何根据您的项目需求以及特定的用户身份验证和授权需求来调整用户模型。在以下前言中我将讲述为什么自定义用户模型是如此重要以及其潜在的优势 随着Web应用的不断发展用户身份认证和授权的需求也变得越来越多样化。在默认情况下Django提供了一个名为django.contrib.auth.models.User的用户模型它包含了常见的用户属性和方法但不一定满足所有项目的要求。因此自定义用户模型成为了一个必要的选择它允许我们根据项目的具体需求来调整用户模型。 自定义用户模型的优势无处不在。首先它使我们能够添加、修改或删除用户模型中的字段以适应项目的特定数据。您可以为用户模型添加新的属性如个人资料信息、头像、联系方式等从而更好地满足项目需求。其次自定义用户模型也允许您更好地集成社交媒体登录、第三方身份验证等功能以提供更多的用户便利性。 此外自定义用户模型还可以增强安全性。通过添加自定义字段您可以更好地管理密码策略实施多因素身份验证记录安全审计日志等。最重要的是自定义用户模型为您提供了更大的灵活性以适应未来的项目需求和扩展。 总之自定义用户模型不仅仅是一种实现特定项目需求的手段更是提高Web应用的灵活性、安全性和可维护性的重要工具。在接下来的文章中我们将深入探讨如何创建和使用自定义用户模型以及它如何帮助我们构建更强大的Django应用。 Django用户模型 Django用户模型是Django框架的一个关键组件用于处理用户认证和用户管理的任务。它为您提供了一种便捷的方式来创建、注册、登录和管理用户同时也支持用户自定义以满足特定项目需求。 内置用户模型 Django提供了一个内置的用户模型 (django.contrib.auth.models.User)其中包含以下常见用户属性 用户名密码电子邮件地址名字姓氏 您可以轻松地在Django项目中启用这个内置用户模型并使用它来实现用户认证功能。 用户认证 Django用户模型简化了用户认证流程。以下是一些与用户认证相关的功能 用户注册用户登录用户注销密码重置用户会话管理 Django提供了内置视图和装饰器以帮助您轻松实现这些功能。 用户自定义 如果需要更多用户属性或者用户模型的不同结构您可以自定义用户模型。通常的做法是创建一个自定义用户模型继承自 AbstractUser然后为其添加额外的字段以满足项目的需求。 from django.contrib.auth.models import AbstractUserclass CustomUser(AbstractUser):# 自定义字段age models.PositiveIntegerField()用户认证后端 Django允许您使用不同的用户认证后端。默认情况下Django使用用户名和密码进行认证但您可以实现其他认证方法如社交媒体登录、LDAP认证等。 权限和组 Django用户模型也支持用户权限和用户组的管理。您可以为用户分配不同的权限并将用户组用于更好地管理这些权限。 用户管理界面 Django提供了一个内置的管理界面可用于管理用户、组和权限使用户管理变得更加便捷。 这些是Django用户模型的一些重要方面它们可用于构建强大的用户认证和管理系统同时也具备灵活性以满足不同项目的需求。 创建自定义模型 创建一个account应用 python manage.py startapp account创建自定义用户管理器 由于我们需要对默认用户模型的字段进行增删所以需要自己实现一个用户管理器来管理我们的自定义模型。 class UserManager(BaseUserManager):用户管理器use_in_migrations Truedef _create_user(self, username, email, password, **extra_fields):if not username:raise ValueError(The given username must be set)email self.normalize_email(email)username self.model.normalize_username(username)user self.model(usernameusername, emailemail, passwordpassword, **extra_fields)user.save(usingself._db)return userdef create_user(self, username, emailNone, passwordNone, **extra_fields):extra_fields.setdefault(is_active, False)extra_fields.setdefault(is_superuser, False)return self._create_user(username, email, password, **extra_fields)def create_superuser(self, username, email, password, **extra_fields):extra_fields.setdefault(is_active, True)extra_fields.setdefault(is_superuser, True)if extra_fields.get(is_active) is not True:raise ValueError(Superuser must have is_activeTrue.)if extra_fields.get(is_superuser) is not True:raise ValueError(Superuser must have is_superuserTrue.)return self._create_user(username, email, password, **extra_fields)特征自定义管理器 (UserManager)默认管理器 (django.contrib.auth.models.UserManager)创建用户方法提供 _create_user, create_user 和 create_superuser 方法允许根据特定需求创建用户对象。提供 create_user 和 create_superuser 方法用于创建普通用户和超级用户但可能不够灵活以满足特定需求。默认值设置允许设置特定的默认值如 is_active 和 is_superuser以确保创建的用户对象具有所需属性。提供一组默认值通常创建的用户是活动的和非超级用户可能需要进一步修改属性。私有方法包含 _create_user 方法它是私有的不直接暴露给外部调用而是通过公共方法 create_user 和 create_superuser 访问。默认管理器没有私有方法所有方法都是公共的可以直接调用。自定义性提供更灵活的方式来定义用户创建逻辑包括额外字段的处理和验证。提供通用的用户创建方法适用于大多数情况但可能不满足特定项目的自定义需求。用途适用于需要特定用户创建逻辑和更多控制的项目。适用于大多数一般情况下的项目需要快速创建用户对象。 通过上述比较您可以看到自定义管理器和默认管理器之间的一些关键区别自定义管理器更适合在需要更多控制和自定义的项目中使用。默认管理器适用于一般情况下可以快速创建用户对象而自定义管理器则提供了更多的弹性和灵活性。 创建抽象用户模型 创建自定义权限混合模型 #!/usr/bin/python # -*- coding: utf-8 -*- from django.contrib.auth.models import _user_has_perm, _user_has_module_perms from django.db import modelsclass PermissionsMixin(models.Model):超级用户权限混合模型is_superuser models.BooleanField(超级用户状态, defaultFalse, help_text指明该用户缺省拥有所有权限。)class Meta:abstract Truedef has_perm(self, perm, objNone):Return True if the user has the specified permission. Query allavailable auth backends, but return immediately if any backend returnsTrue. Thus, a user who has permission from a single auth backend isassumed to have permission in general. If an object is provided, checkpermissions for that object.# Active superusers have all permissions.if self.is_superuser:return True# Otherwise we need to check the backends.return _user_has_perm(self, perm, obj)def has_module_perms(self, app_label):Return True if the user has any permissions in the given app label.Use simlar logic as has_perm(), above.# Active superusers have all permissions.if self.is_superuser:return Truereturn _user_has_module_perms(self, app_label)PermissionsMixin 是一个抽象模型用于将超级用户的权限特性添加到用户模型中。我们的自定义PermissionsMixin 与Django默认的用户模型User之间的主要区别在于权限管理。 特征PermissionsMixin默认的 User 模型超级用户标识字段is_superuser存在并且是一个布尔字段用于表示用户是否是超级用户。默认情况下用户不是超级用户。默认 User 模型中也存在 is_superuser 字段但在创建用户时通常不会指定该字段它会默认为 False。检查用户权限的方法has_permPermissionsMixin 提供了 has_perm 方法用于检查用户是否具有指定的权限。如果用户是超级用户直接返回 True。默认 User 模型中也有 has_perm 方法但其行为可能会因所使用的身份验证后端而异。检查应用程序权限的方法has_module_permsPermissionsMixin 提供了 has_module_perms 方法用于检查用户是否在给定应用程序标签中具有任何权限。默认 User 模型中没有 has_module_perms 方法检查应用程序权限通常需要自己实现。使用场景适用于需要超级用户权限相关功能的应用可以与自定义用户模型一起使用。适用于一般情况下的应用通常不需要额外的超级用户权限功能。默认值设置is_superuser 默认为 False表示用户不是超级用户。需要在用户创建时手动设置为 True。is_superuser 默认为 False在创建用户时通常不需要显式设置。帮助文本提供了帮助文本解释了 is_superuser 字段的作用即指明该用户是否默认拥有所有权限。默认 User 模型中的 is_superuser 字段通常没有相应的帮助文本。 总的来说PermissionsMixin 旨在扩展用户模型以添加超级用户权限相关的功能如检查用户是否具有特定权限和应用程序权限。默认的 User 模型是通用的适用于大多数一般情况但不包括额外的超级用户权限管理功能。可以根据项目需求选择是否使用 PermissionsMixin 或默认的 User 模型。 创建自定义校验器 #!/usr/bin/python # -*- coding: utf-8 -*- from django.core import validators from django.utils.deconstruct import deconstructibledeconstructible class UsernameValidator(validators.RegexValidator):用户名校验regex r^[a-zA-Z0-9_.]{4,16}$message 请输入4-16位字母数字以及下划线和点的组合flags 0我们创建了一个自定义的用户名校验器该校验器通过继承 validators.RegexValidator 并使用 deconstructible 装饰器来创建一个可序列化的自定义校验器。 创建抽象用户模型 class AbstractUser(AbstractBaseUser, PermissionsMixin):抽象用户模型username_validator UsernameValidator()username models.CharField(用户名, max_length150, uniqueTrue, validators[username_validator],help_text必填。150个字符或者更少。包含字母数字和仅有的/.//-/_符号。,error_messages{unique: 已存在一位使用该名字的用户。,})email models.EmailField(电子邮件地址, uniqueTrue, blankFalse, nullFalse)is_active models.BooleanField(有效, defaultFalse, help_text指明用户是否被认为是活跃的。以反选代替删除帐号。)# 需要使用 Django Admin的同学必须添加该字段不然访问会报错is_staff models.BooleanField(员工, defaultTrue)date_joined models.DateTimeField(加入日期, defaulttimezone.now)objects UserManager()EMAIL_FIELD emailUSERNAME_FIELD usernameREQUIRED_FIELDS [email]class Meta:verbose_name 用户verbose_name_plural verbose_nameabstract True关键点描述类的名称AbstractUser - 这是一个抽象用户模型。继承关系继承自 AbstractBaseUser 和 PermissionsMixin具备身份认证和权限管理的功能。username_validator包含了用户名校验器 UsernameValidator用于验证用户名是否符合指定格式要求。username 字段表示用户的用户名包含帮助文本和错误消息唯一且不可为空。email 字段表示用户的电子邮件地址唯一且不可为空。is_active 字段表示用户的活跃状态默认为非活跃状态。date_joined 字段表示用户的加入日期使用 timezone.now 作为默认值。objects用户管理器通常是一个自定义的用户管理器用于管理用户对象。EMAIL_FIELD用户模型中用于电子邮件地址的字段名称。USERNAME_FIELD用户模型中用于用户名的字段名称。REQUIRED_FIELDS包含了必填字段列表包括了电子邮件地址。Meta 类定义了一些元数据如用户模型的名称、复数形式名称以及将其设置为抽象模型。用途用作其他用户模型的基础提供了身份认证和权限管理的功能可用于创建自定义用户模型。 这个抽象用户模型提供了一个基础可用作其他用户模型的基础。其他用户模型可以继承此抽象用户模型以获得身份认证和权限管理的功能并根据需要扩展字段和行为。这样我们可以轻松创建满足特定项目需求的用户模型。 创建用户模型 class User(AbstractUser):avatar models.URLField(头像, nullTrue)last_login_ip models.GenericIPAddressField(nullTrue)def __str__(self):return self.usernameclass Meta:ordering [-last_login]关键点描述类的名称User - 这是一个自定义用户模型继承自Django内置的AbstractUser。继承关系继承自AbstractUser继承了AbstractUser中的字段和方法并允许添加自定义字段和方法。自定义字段- avatar字段用于存储用户的头像URL类型为URLField允许为空。- last_login_ip字段用于存储用户的上次登录IP地址类型为GenericIPAddressField也允许为空。__str__ 方法定义了对象的字符串表示返回用户的用户名作为字符串表示。Meta 类- ordering属性定义查询结果的默认排序方式按last_login字段降序排序最后登录的用户排在前面。用途用作自定义用户模型允许在Django应用中使用并添加额外的字段和方法来满足特定项目的需求。 这个自定义用户模型允许我们创建具有额外功能的用户对象例如存储用户头像和上次登录IP地址同时继承了Django内置用户管理的功能如身份认证和权限管理。可以根据具体项目的需求创建自定义用户模型来满足特定的功能和字段要求。 应用自定义用户模型 AUTH_USER_MODEL account.UserAUTH_USER_MODEL 是一个Django设置用于指定自定义用户模型的路径。AUTH_USER_MODEL 被设置为 ‘account.User’表示自定义用户模型位于account应用中的User模型。 通过设置AUTH_USER_MODEL告诉Django使用指定的用户模型来处理身份验证和用户相关的操作而不是使用默认的django.contrib.auth.models.User模型。这允许我们自定义用户模型以满足项目的特定需求。 在使用自定义用户模型时需要确保将AUTH_USER_MODEL设置在项目的设置文件中以便Django知道要使用哪个用户模型。这通常在项目的settings.py文件中设置。 在后续开发中我们使用get_user_model() 用于替代硬编码用户模型的引用以提高代码的灵活性和可维护性。在使用自定义用户模型时它有助于确保代码与用户模型的更改保持兼容。比如 User get_user_model()处理用户注册时填写的密码 #!/usr/bin/python # -*- coding: utf-8 -*- from django.contrib.auth import get_user_model from django.db.models import signals from django.dispatch import receiverUser get_user_model()receiver(signals.post_save, senderUser) def create_user(sender, instanceNone, createdFalse, **kwargs):创建用户信号量if created:创建用户时将明文密码改成加密格式password instance.passwordinstance.set_password(password)instance.save()关键点描述获取用户模型get_user_model()使用 get_user_model() 函数来获取当前项目中配置的用户模型确保与项目中使用的用户模型保持一致。信号接收器装饰器receiver使用 receiver 装饰器注册信号接收器指定了接收 post_save 信号表示在保存用户对象后触发信号同时指定了信号的发送者为 User 模型。create_user 函数信号接收器的处理函数用于处理 post_save 信号。- created 参数用于判断用户对象是否是新创建的如果 created 为 True表示用户是新创建的。- 密码加密在处理函数中从用户实例中获取明文密码然后使用 set_password 方法将其转换为加密格式最后保存用户实例以将加密后的密码存储到数据库中。作用该信号接收器的作用是在创建用户时自动将明文密码转换为加密格式并保存到数据库中以提高用户密码的安全性。 这个信号量用于确保用户的密码在创建时自动得到加密处理而不以明文形式存储在数据库中。通常与自定义用户模型一起使用以确保密码安全性的提高。 我们需要在apps.py中注册这个信号量 from django.apps import AppConfigclass AccountConfig(AppConfig):default_auto_field django.db.models.BigAutoFieldname accountdef ready(self):from . import signalsready 方法是应用配置的一个特殊方法它在Django启动时自动执行。在这里它导入了应用内的signals模块以便应用的信号接收器可以注册并在应用启动时生效。 此时千万不要忘了在配置文件里注册我们的account应用 INSTALLED_APPS [...account.apps.AccountConfig,... ]重新初始化数据库 由于我们更改了用户模型对数据库影响较大应用到数据库的时候可能会报错所以建议删掉所有表重新初始化。 python manage.py makemigrations python manage.py migrate模型的更改应用到数据库后我们就可以生成超级用户了 python manage.py createsuperuser由上图可以看出我们已经应用新的用户模型生成了数据库表并且创建了超级用户。 结语 在本文中我们探讨了Django中的用户模型、信号接收器以及数据库迁移。我们了解了如何自定义用户模型以满足特定项目需求如何使用信号接收器处理各种操作以及如何使用迁移来管理数据库模式的变更。这些都是Django中的关键概念有助于构建强大的Web应用。希望本文能帮助您更深入地理解这些概念并在您的项目中有所应用。
http://www.zqtcl.cn/news/372477/

相关文章:

  • 手机网站建站系统成都如何做网站
  • 安徽省住房和建设执业资格注册中心网站优质公司网站
  • 深圳福田做网站公司cname解析对网站影响
  • 做个网站要多久网站制作文案
  • 用户搭建网站wordpress代码实现头像
  • 和平区网站建设app和手机网站
  • 腾讯科技微信小程序电商seo是什么意思啊
  • 手机网站模板更换方法新闻客户端网站开发
  • 湛江定制建站黄页推广app软件
  • 盈利型网站做安卓app用什么软件
  • wordpress优秀移动站点西宁公司网站建设
  • 浙江网站建设的要求建设网上商城网站的目的和意义
  • 西峰住房和城乡建设局网站关于校园网站升级建设的报告
  • 网站怎么自适应屏幕大小达人室内设计网app
  • 做网站的软件名字全拼wordpress面包屑文字大小如何调整
  • 如何建设软件下载网站北京网站建设出名 乐云践新
  • 网站seo外包南宁网站建设活动
  • 汽车行业网站设计做互联网公司网站谈单模拟视频教学
  • 做网站界面设计注意什么江苏宿迁房产网
  • 传奇服务器网站如何建设帮人做兼职的网站
  • 织梦手机网站有广告位wordpress媒体库现实不全
  • 网站建设外包公司怎么样珠海网站排名提升
  • 电子商务网站建设结业论文做网站的图片字虚
  • 米拓建站最新进展注册做网站的公司有哪些
  • 设计网站设计wordpress 改系统
  • 学校网站建设评审会议通知网站是怎么赢利的
  • 手机网站建设 苏州优化网站哪个好
  • 网站建设流程方案通州网站建设公司
  • 免费的十大免费货源网站全国领先网站制作
  • 农业网站建设方案 ppt中国有什么网站做跨境零售