|
|
|
|
@ -9,27 +9,72 @@ from djangoblog.utils import get_current_site
|
|
|
|
|
# Create your models here.
|
|
|
|
|
|
|
|
|
|
class BlogUser(AbstractUser):
|
|
|
|
|
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)
|
|
|
|
|
source = models.CharField(_('create source'), max_length=100, blank=True)
|
|
|
|
|
"""
|
|
|
|
|
博客用户模型,继承自Django内置的AbstractUser基类
|
|
|
|
|
扩展了标准用户模型,增加博客系统特有的字段
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
#ZXY: 昵称字段:用户显示名称,可为空
|
|
|
|
|
nickname = models.CharField(
|
|
|
|
|
_('nick name'), #ZXY: 国际化标签,在admin中显示为"昵称"
|
|
|
|
|
max_length=100, #ZXY: 最大长度100个字符
|
|
|
|
|
blank=True) #ZXY: 允许为空,非必填字段
|
|
|
|
|
|
|
|
|
|
#ZXY: 创建时间:记录用户账号创建的时间点
|
|
|
|
|
creation_time = models.DateTimeField(
|
|
|
|
|
_('creation time'), #ZXY: 显示为"创建时间"
|
|
|
|
|
default=now) #ZXY: 默认值为当前时间,自动记录创建时间戳
|
|
|
|
|
|
|
|
|
|
#ZXY: 最后修改时间:记录用户信息最后一次修改的时间
|
|
|
|
|
last_modify_time = models.DateTimeField(
|
|
|
|
|
_('last modify time'), #ZXY: 显示为"最后修改时间"
|
|
|
|
|
default=now) #ZXY: 默认值为当前时间
|
|
|
|
|
|
|
|
|
|
#ZXY: 注册来源:记录用户是通过什么渠道注册的
|
|
|
|
|
source = models.CharField(
|
|
|
|
|
_('create source'), #ZXY: 显示为"创建来源"
|
|
|
|
|
max_length=100, #ZXY: 最大长度100个字符
|
|
|
|
|
blank=True) #ZXY: 允许为空
|
|
|
|
|
|
|
|
|
|
def get_absolute_url(self):
|
|
|
|
|
"""
|
|
|
|
|
获取用户详情页的URL路径(不含域名)
|
|
|
|
|
用于Django的通用视图和admin中的"查看现场"链接
|
|
|
|
|
Returns:
|
|
|
|
|
str: 用户详情页的URL路径,如 '/author/testuser/'
|
|
|
|
|
"""
|
|
|
|
|
return reverse(
|
|
|
|
|
'blog:author_detail', kwargs={
|
|
|
|
|
'author_name': self.username})
|
|
|
|
|
'author_name': self.username}) #ZXY: 使用用户名作为URL参数
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
"""
|
|
|
|
|
定义模型的字符串表示,在admin和shell中显示
|
|
|
|
|
这里使用邮箱而不是用户名,便于管理员识别用户
|
|
|
|
|
Returns:
|
|
|
|
|
str: 用户的邮箱地址
|
|
|
|
|
"""
|
|
|
|
|
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
|
|
|
|
|
用于邮件通知、外部链接等需要完整URL的场景
|
|
|
|
|
Returns:
|
|
|
|
|
str: 完整的用户URL,如 'https://example.com/author/testuser/'
|
|
|
|
|
"""
|
|
|
|
|
site = get_current_site().domain #ZXY: 获取当前站点的域名
|
|
|
|
|
url = "https://{site}{path}".format(
|
|
|
|
|
site=site,
|
|
|
|
|
path=self.get_absolute_url()) #ZXY: 组合域名和路径
|
|
|
|
|
return url
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
ordering = ['-id']
|
|
|
|
|
verbose_name = _('user')
|
|
|
|
|
verbose_name_plural = verbose_name
|
|
|
|
|
get_latest_by = 'id'
|
|
|
|
|
"""
|
|
|
|
|
模型的元数据配置类
|
|
|
|
|
用于定义模型级别的选项和配置
|
|
|
|
|
"""
|
|
|
|
|
ordering = ['-id'] #ZXY: 默认按ID降序排列,新的用户显示在前面
|
|
|
|
|
verbose_name = _('user') #ZXY: 单数形式的显示名称
|
|
|
|
|
verbose_name_plural = verbose_name #ZXY: 复数形式与单数相同
|
|
|
|
|
get_latest_by = 'id' #ZXY: 指定获取最新记录的字段
|
|
|
|
|
|