|
|
#shw 导入Django内置的抽象用户模型基类
|
|
|
from django.contrib.auth.models import AbstractUser
|
|
|
#shw 导入Django的数据库模型模块
|
|
|
from django.db import models
|
|
|
#shw 导入Django的URL反向解析函数
|
|
|
from django.urls import reverse
|
|
|
#shw 导入Django的时区工具,用于获取当前时间
|
|
|
from django.utils.timezone import now
|
|
|
#shw 导入Django的国际化和翻译工具
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
|
from djangoblog.utils import get_current_site
|
|
|
|
|
|
|
|
|
#shw 在这里创建你的模型。
|
|
|
|
|
|
class BlogUser(AbstractUser):
|
|
|
#shw 自定义用户模型,继承自Django的AbstractUser。
|
|
|
#shw 它扩展了默认用户模型,增加了博客系统所需的额外字段。
|
|
|
|
|
|
#shw 用户昵称字段,可为空
|
|
|
nickname = models.CharField(_('nick name'), max_length=100, blank=True)
|
|
|
#shw 用户创建时间字段,默认为当前时间
|
|
|
creation_time = models.DateTimeField(_('creation time'), default=now)
|
|
|
#shw 用户最后修改时间字段,默认为当前时间
|
|
|
last_modify_time = models.DateTimeField(_('last modify time'), default=now)
|
|
|
#shw 用户创建来源字段(如:'adminsite', 'register'),可为空
|
|
|
source = models.CharField(_('create source'), max_length=100, blank=True)
|
|
|
|
|
|
def get_absolute_url(self):
|
|
|
#shw 定义获取用户详情页绝对路径的方法。
|
|
|
#shw Django Admin和其他地方会使用这个方法来获取对象的URL。
|
|
|
return reverse(
|
|
|
'blog:author_detail', kwargs={
|
|
|
'author_name': self.username}) #shw 反向解析到博客应用的作者详情页,URL参数为用户名
|
|
|
|
|
|
def __str__(self):
|
|
|
#shw 定义对象的字符串表示形式。
|
|
|
#shw 在Django Admin或打印对象时会显示这个字符串。
|
|
|
return self.email #shw 返回用户的邮箱作为其字符串表示
|
|
|
|
|
|
def get_full_url(self):
|
|
|
#shw 定义获取用户详情页完整URL(包含域名)的方法。
|
|
|
site = get_current_site().domain #shw 获取当前站点的域名
|
|
|
#shw 拼接协议、域名和绝对路径,形成完整的URL
|
|
|
url = "https://{site}{path}".format(site=site,
|
|
|
path=self.get_absolute_url())
|
|
|
return url
|
|
|
|
|
|
class Meta:
|
|
|
#shw Meta类用于定义模型的元数据选项。
|
|
|
ordering = ['-id'] #shw 默认按ID降序排列
|
|
|
verbose_name = _('user') #shw 在Django Admin中显示的单数名称,支持国际化
|
|
|
verbose_name_plural = verbose_name #shw 在Django Admin中显示的复数名称
|
|
|
get_latest_by = 'id' #shw 当使用 .latest() 方法时,默认按 'id' 字段查找
|