做游戏网站的前景,上海公司做网站,网站内容建设方法步骤,余姚电商交易网站建设1. 引言
Django 作为一个强大的 Web 框架#xff0c;内置了用户认证系统。然而#xff0c;实际项目中我们通常需要扩展用户模型#xff0c;以满足不同的业务需求。Django 提供了继承 AbstractUser 的方式#xff0c;让我们能够轻松地定制用户模型。本文将通过一个自定义用…1. 引言
Django 作为一个强大的 Web 框架内置了用户认证系统。然而实际项目中我们通常需要扩展用户模型以满足不同的业务需求。Django 提供了继承 AbstractUser 的方式让我们能够轻松地定制用户模型。本文将通过一个自定义用户模型的实例深入解析 Django 自定义用户模型的各个知识点。
2. 自定义用户模型代码示例
下面的代码展示了如何在 Django 中创建一个自定义的用户模型 BlogUser并添加额外的字段和功能
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.urls import reverse
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from djangoblog.utils import get_current_siteclass BlogUser(AbstractUser):nickname models.CharField(_(Nickname), max_length100, blankTrue)creation_time models.DateTimeField(_(Creation time), defaultnow, editableFalse)last_modify_time models.DateTimeField(_(Last modified time), auto_nowTrue)source models.CharField(_(Source), max_length100, blankTrue)def get_absolute_url(self):return reverse(blog:author_detail, kwargs{author_name: self.username})def __str__(self):return self.username if self.nickname else self.nicknamedef get_full_url(self):site get_current_site().domainreturn fhttps://{site}{self.get_absolute_url()}class Meta:ordering [-id]verbose_name _(User)verbose_name_plural _(Users)get_latest_by id
3. 自定义用户模型详解
3.1 继承 AbstractUser
BlogUser 继承了 Django 内置的 AbstractUser这意味着该模型默认具备了 Django 用户认证系统的基础功能比如用户名、密码、邮箱、权限等字段。同时它还允许我们在此基础上添加自定义字段如昵称、创建时间、修改时间等从而满足项目的需求。
3.2 自定义字段
nickname:
这是用户的昵称字段类型为 CharField最大长度为 100允许为空。我们通过 gettext_lazy 使用国际化支持_(Nickname) 使得该字段的名称可以在不同语言环境下翻译显示。
creation_time:
该字段记录了用户创建的时间。它是一个 DateTimeField使用了 defaultnow 来自动记录用户实例创建时的时间。通过 editableFalse 参数我们确保该字段在用户创建后无法被手动修改。
last_modify_time:
这个字段记录了用户信息最后一次修改的时间。通过 auto_nowTrue我们确保每次修改用户信息时该字段都会自动更新为当前时间。这个字段非常适合记录数据的变更时间。
source:
该字段记录了用户的创建来源。它同样是一个可选的字符串字段最大长度为 100。创建来源可以帮助追踪用户的来源信息如是通过网站注册、社交媒体登录还是其他方式创建。
3.3 get_absolute_url 方法
get_absolute_url 是 Django 模型中的一个常见方法用于生成模型实例的绝对 URL。在本例中我们通过 reverse 函数生成用户详情页的 URL。reverse 根据视图的名称 blog:author_detail 及用户的 username动态生成 URL。
这种动态生成 URL 的方式避免了硬编码路径不仅提高了代码的灵活性还能在 URL 结构发生变化时轻松进行维护。
示例
def get_absolute_url(self):return reverse(blog:author_detail, kwargs{author_name: self.username})
当我们调用 get_absolute_url() 时Django 会生成该用户的详情页 URL比如 /author/john/。
3.4 __str__ 方法
__str__ 方法定义了模型实例的字符串表示。在管理后台或者在调试时打印模型实例通常会调用此方法。对于用户模型使用昵称优先作为显示内容如果用户没有设置昵称则返回用户名。
示例
def __str__(self):return self.username if self.nickname else self.nickname
这样一来当用户有昵称时会显示昵称如果没有昵称就显示用户名确保用户模型的展示个性化。
3.5 get_full_url 方法
get_full_url 方法返回了完整的用户详情页 URL包括了站点的域名。我们通过 get_current_site 函数获取当前站点的域名并拼接绝对 URL生成完整的链接。这在前端显示用户详情页或者生成分享链接时非常有用。
示例
def get_full_url(self):site get_current_site().domainreturn fhttps://{site}{self.get_absolute_url()}
这个方法生成的 URL 可能是 https://mywebsite.com/author/john/适合用于页面的完整链接展示。
3.6 Meta 类
Meta 类用于定义模型的元数据。它可以控制模型的行为比如数据的默认排序方式、模型在管理后台显示的名称等。
ordering: ordering [-id] 表示查询用户时按 ID 降序排列即最新创建的用户会首先展示。verbose_name 和 verbose_name_plural: 这些字段定义了模型在管理后台的显示名称。在这里verbose_name _(User) 和 verbose_name_plural _(Users) 确保了单数和复数形式的用户名称可以通过国际化翻译。get_latest_by: 通过 get_latest_by我们定义了在获取最新记录时以哪个字段为依据。在这里我们使用了 id 字段来获取最新创建的用户。
4. 自定义用户模型的常见场景
在 Web 应用中用户模型通常是核心的组成部分而自定义用户模型的需求在很多场景中都会出现。比如
博客系统为用户添加昵称、头像、个人简介等自定义字段用于展示用户信息。电商平台可能需要扩展用户模型以记录用户的地址、购物习惯、订单历史等信息。社交平台需要记录用户的注册来源、关注列表、好友等数据。
自定义用户模型为我们提供了极大的灵活性使得开发者可以根据项目需求灵活调整模型结构。
5. 小结
通过自定义用户模型Django 提供了强大的扩展能力使得开发者可以在默认用户模型的基础上添加任意需要的字段和功能。本文详细解读了一个自定义用户模型 BlogUser展示了如何为用户添加昵称、创建时间、修改时间等字段并通过 get_absolute_url 和 get_full_url 实现动态 URL 生成。无论是小型网站还是大型系统自定义用户模型都能极大地满足不同的业务需求并提升系统的灵活性和可扩展性。 这篇博客专注于 Django 自定义用户模型的讲解介绍了具体实现和常见的使用场景。 文章转载自: http://www.morning.bsbcp.cn.gov.cn.bsbcp.cn http://www.morning.rrxnz.cn.gov.cn.rrxnz.cn http://www.morning.xjpnq.cn.gov.cn.xjpnq.cn http://www.morning.rlqml.cn.gov.cn.rlqml.cn http://www.morning.wnnfh.cn.gov.cn.wnnfh.cn http://www.morning.mqwdh.cn.gov.cn.mqwdh.cn http://www.morning.nsppc.cn.gov.cn.nsppc.cn http://www.morning.qxjck.cn.gov.cn.qxjck.cn http://www.morning.rfdqr.cn.gov.cn.rfdqr.cn http://www.morning.tkhyk.cn.gov.cn.tkhyk.cn http://www.morning.pbtrx.cn.gov.cn.pbtrx.cn http://www.morning.fqtdz.cn.gov.cn.fqtdz.cn http://www.morning.wtsr.cn.gov.cn.wtsr.cn http://www.morning.lgnrl.cn.gov.cn.lgnrl.cn http://www.morning.mqwnp.cn.gov.cn.mqwnp.cn http://www.morning.wglhz.cn.gov.cn.wglhz.cn http://www.morning.crqbt.cn.gov.cn.crqbt.cn http://www.morning.kxwsn.cn.gov.cn.kxwsn.cn http://www.morning.tjwlp.cn.gov.cn.tjwlp.cn http://www.morning.nhgfz.cn.gov.cn.nhgfz.cn http://www.morning.ndnhf.cn.gov.cn.ndnhf.cn http://www.morning.mbrbg.cn.gov.cn.mbrbg.cn http://www.morning.wjfzp.cn.gov.cn.wjfzp.cn http://www.morning.wqfrd.cn.gov.cn.wqfrd.cn http://www.morning.xbhpm.cn.gov.cn.xbhpm.cn http://www.morning.zbnkt.cn.gov.cn.zbnkt.cn http://www.morning.yldgw.cn.gov.cn.yldgw.cn http://www.morning.rxyz.cn.gov.cn.rxyz.cn http://www.morning.sbpt.cn.gov.cn.sbpt.cn http://www.morning.qkgwz.cn.gov.cn.qkgwz.cn http://www.morning.nbwyk.cn.gov.cn.nbwyk.cn http://www.morning.bjsites.com.gov.cn.bjsites.com http://www.morning.jfjfk.cn.gov.cn.jfjfk.cn http://www.morning.sryyt.cn.gov.cn.sryyt.cn http://www.morning.trsdm.cn.gov.cn.trsdm.cn http://www.morning.trrrm.cn.gov.cn.trrrm.cn http://www.morning.xzqzd.cn.gov.cn.xzqzd.cn http://www.morning.rxnr.cn.gov.cn.rxnr.cn http://www.morning.nfdty.cn.gov.cn.nfdty.cn http://www.morning.lqrpk.cn.gov.cn.lqrpk.cn http://www.morning.hgkbj.cn.gov.cn.hgkbj.cn http://www.morning.qpntn.cn.gov.cn.qpntn.cn http://www.morning.xtyyg.cn.gov.cn.xtyyg.cn http://www.morning.xcfmh.cn.gov.cn.xcfmh.cn http://www.morning.ykgkh.cn.gov.cn.ykgkh.cn http://www.morning.wgqtt.cn.gov.cn.wgqtt.cn http://www.morning.nmqdk.cn.gov.cn.nmqdk.cn http://www.morning.cwzzr.cn.gov.cn.cwzzr.cn http://www.morning.qmnhw.cn.gov.cn.qmnhw.cn http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn http://www.morning.wnmdt.cn.gov.cn.wnmdt.cn http://www.morning.lkbdy.cn.gov.cn.lkbdy.cn http://www.morning.sbjhm.cn.gov.cn.sbjhm.cn http://www.morning.gyqnp.cn.gov.cn.gyqnp.cn http://www.morning.rnxw.cn.gov.cn.rnxw.cn http://www.morning.trkl.cn.gov.cn.trkl.cn http://www.morning.xnkh.cn.gov.cn.xnkh.cn http://www.morning.nqyzg.cn.gov.cn.nqyzg.cn http://www.morning.kgphc.cn.gov.cn.kgphc.cn http://www.morning.bpmth.cn.gov.cn.bpmth.cn http://www.morning.jxscp.cn.gov.cn.jxscp.cn http://www.morning.mdjzydr.com.gov.cn.mdjzydr.com http://www.morning.hcsnk.cn.gov.cn.hcsnk.cn http://www.morning.xhhzn.cn.gov.cn.xhhzn.cn http://www.morning.gsjzs.cn.gov.cn.gsjzs.cn http://www.morning.nlcw.cn.gov.cn.nlcw.cn http://www.morning.lpgw.cn.gov.cn.lpgw.cn http://www.morning.pjwfs.cn.gov.cn.pjwfs.cn http://www.morning.kwfnt.cn.gov.cn.kwfnt.cn http://www.morning.xqltq.cn.gov.cn.xqltq.cn http://www.morning.ydhck.cn.gov.cn.ydhck.cn http://www.morning.rrwft.cn.gov.cn.rrwft.cn http://www.morning.trjdr.cn.gov.cn.trjdr.cn http://www.morning.hnhkz.cn.gov.cn.hnhkz.cn http://www.morning.bwygy.cn.gov.cn.bwygy.cn http://www.morning.kjsft.cn.gov.cn.kjsft.cn http://www.morning.zzaxr.cn.gov.cn.zzaxr.cn http://www.morning.fzqfb.cn.gov.cn.fzqfb.cn http://www.morning.qwmdx.cn.gov.cn.qwmdx.cn