# 导入Django抽象用户基类 from django.contrib.auth.models import AbstractUser # 导入Django数据库模型 from django.db import models # 导入URL反向解析函数 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 # 在这里创建模型 class BlogUser(AbstractUser): """自定义用户模型,继承自Django抽象用户基类""" # 昵称字段,最大长度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字符,允许为空 source = models.CharField( _('create source'), # 字段显示名称:创建来源 max_length=100, # 最大长度 blank=True # 允许为空 ) def get_absolute_url(self): """获取用户的绝对URL,用于生成用户详情页链接""" # 使用reverse反向解析URL,传入用户名作为参数 return reverse( 'blog:author_detail', # URL模式名称 kwargs={'author_name': self.username} # URL参数:作者用户名 ) def __str__(self): """对象的字符串表示,返回邮箱地址""" return self.email def get_full_url(self): """获取用户的完整URL(包含域名)""" # 获取当前站点域名 site = get_current_site().domain # 构建完整URL:https://域名 + 用户详情页路径 url = "https://{site}{path}".format( site=site, # 站点域名 path=self.get_absolute_url() # 用户详情页路径 ) # 返回完整URL return url class Meta: """模型的元数据配置""" ordering = ['-id'] # 默认排序:按ID降序排列 verbose_name = _('user') # 单数显示名称:用户 verbose_name_plural = verbose_name # 复数显示名称:与单数相同 get_latest_by = 'id' # 获取最新记录的依据字段:ID