diff --git a/accounts/models.py b/accounts/models.py index 3baddbb2..d194f1b3 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -3,33 +3,58 @@ 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_site - +from djangoblog.utils import get_current_site # 导入项目公共工具函数(获取当前站点域名) +# 模块级注释——accounts应用的核心数据模型文件, +# 定义自定义用户模型`BlogUser`,继承Django内置`AbstractUser`, +# 扩展业务所需的自定义字段(如昵称、创建时间、创建来源), +# 并重写核心方法以适配项目业务逻辑(如用户URL生成、字符串表示) # Create your models here. + class BlogUser(AbstractUser): + """ + 自定义用户模型,继承Django内置`AbstractUser`(保留用户名、密码、邮箱等核心字段) + 扩展项目所需的业务字段,适配博客系统的用户管理需求,支持国际化配置 + """ + # 昵称字段:支持国际化标签,最大长度100,允许空值(用户可选择不设置昵称) nickname = models.CharField(_('nick name'), max_length=100, blank=True) + # 创建时间字段:支持国际化标签,默认值为当前时间,记录用户注册时间 creation_time = models.DateTimeField(_('creation time'), default=now) + # 最后修改时间字段:支持国际化标签,默认值为当前时间,记录用户信息最后更新时间 last_modify_time = models.DateTimeField(_('last modify time'), default=now) + # 创建来源字段:支持国际化标签,最大长度100,允许空值,用于标记用户注册渠道(如"adminsite"/"frontend"/"oauth") source = models.CharField(_('create source'), max_length=100, blank=True) def get_absolute_url(self): + """ + 重写Django模型的`get_absolute_url`方法,获取用户的绝对路径URL + 关联博客系统的"作者详情页"路由,用于直接访问用户的个人主页 + """ return reverse( - 'blog:author_detail', kwargs={ - 'author_name': self.username}) + 'blog:author_detail', # 路由名称(对应blog应用的作者详情页路由) + kwargs={'author_name': self.username} # 路由参数:用户名(作为作者标识) + ) def __str__(self): + """ + 重写模型的字符串表示方法,返回用户邮箱作为标识 + 相比默认的用户名,邮箱更具唯一性,便于后台管理和日志输出时识别用户 + """ return self.email def get_full_url(self): - site = get_current_site().domain - url = "https://{site}{path}".format(site=site, - path=self.get_absolute_url()) + """ + 扩展方法:获取用户个人主页的完整URL(包含站点域名) + 用于需要分享用户主页的场景(如邮件通知、第三方分享) + """ + site = get_current_site().domain # 通过公共工具函数获取当前站点的域名(如"example.com") + # 拼接域名和用户绝对路径,生成完整URL(支持HTTPS协议) + url = "https://{site}{path}".format(site=site, path=self.get_absolute_url()) return url class Meta: - ordering = ['-id'] - verbose_name = _('user') - verbose_name_plural = verbose_name - get_latest_by = 'id' + ordering = ['-id'] # 数据查询时默认按ID倒序排列(新注册用户优先展示) + verbose_name = _('user') # 模型单数显示名称(支持国际化) + verbose_name_plural = verbose_name # 模型复数显示名称(与单数一致,简化管理) + get_latest_by = 'id' # 按ID字段获取最新创建的用户记录 \ No newline at end of file