diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/models.py b/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/models.py index 3baddbb..1eba368 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/models.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/models.py @@ -6,30 +6,46 @@ from django.utils.translation import gettext_lazy as _ from djangoblog.utils import get_current_site +#ccy: 用户管理模块 - 扩展Django默认用户模型,添加博客系统所需的用户字段和功能 # Create your models here. +#ccy: 博客用户模型 - 继承AbstractUser扩展自定义用户字段 class BlogUser(AbstractUser): + #ccy: 用户昵称字段,最大长度100字符,允许为空 nickname = models.CharField(_('nick name'), max_length=100, blank=True) + #ccy: 用户创建时间,自动设置为当前时间 creation_time = models.DateTimeField(_('creation time'), default=now) + #ccy: 用户最后修改时间,自动更新为当前时间 last_modify_time = models.DateTimeField(_('last modify time'), default=now) + #ccy: 用户创建来源,记录用户注册渠道 source = models.CharField(_('create source'), max_length=100, blank=True) + #ccy: 获取用户绝对URL - 用于生成用户详情页链接 def get_absolute_url(self): return reverse( 'blog:author_detail', kwargs={ 'author_name': self.username}) + #ccy: 字符串表示方法 - 返回用户邮箱作为标识 def __str__(self): return self.email + #ccy: 获取用户完整URL - 包含域名的完整用户链接 def get_full_url(self): + #ccy: 获取当前站点域名 site = get_current_site().domain + #ccy: 拼接完整URL,包含协议和域名 url = "https://{site}{path}".format(site=site, path=self.get_absolute_url()) return url + #ccy: Meta类 - 定义用户模型的元数据配置 class Meta: + #ccy: 按ID降序排列,新用户显示在前面 ordering = ['-id'] + #ccy: 单数模型名称 verbose_name = _('user') + #ccy: 复数模型名称 verbose_name_plural = verbose_name - get_latest_by = 'id' + #ccy: 指定获取最新记录的依据字段 + get_latest_by = 'id' \ No newline at end of file diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py index adf2703..44bb441 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py @@ -1,3 +1,113 @@ +<<<<<<< HEAD +# 导入 Django 内置的路径配置工具和缓存装饰器 +from django.urls import path +from django.views.decorators.cache import cache_page + +# 导入当前应用(blog)的视图模块,用于关联路由与视图逻辑 +from . import views + +# 定义应用命名空间(namespace),用于在模板或反向解析时区分不同应用的路由 +# 例如:在模板中使用 {% url 'blog:index' %} 生成首页链接 +app_name = "blog" + +# 路由配置列表,每个 path 对应一个 URL 规则与视图的映射 +urlpatterns = [ + # 首页路由:匹配根路径(网站域名/) + path( + r'', # URL 路径表达式,空字符串表示根路径 + views.IndexView.as_view(), # 关联的视图类(IndexView),通过 as_view() 转换为可调用视图 + name='index' # 路由名称,用于反向解析(如 reverse('blog:index')) + ), + + # 分页首页路由:匹配带页码的首页(如 /page/2/) + path( + r'page//', # 是路径参数,int 表示接收整数类型,page 是参数名 + views.IndexView.as_view(), # 复用首页视图类,视图中会通过 page 参数处理分页 + name='index_page' + ), + + # 文章详情页路由:按日期和文章ID匹配(如 /article/2023/10/20/100.html) + path( + r'article////.html', + # 路径参数:year(年)、month(月)、day(日)、article_id(文章ID),均为整数 + views.ArticleDetailView.as_view(), # 文章详情视图类,处理文章展示逻辑 + name='detailbyid' + ), + + # 分类详情页路由:按分类名匹配(如 /category/tech.html) + path( + r'category/.html', + # :slug 类型表示接收字母、数字、下划线和连字符组成的字符串(适合URL友好的名称) + views.CategoryDetailView.as_view(), # 分类详情视图类,展示该分类下的文章 + name='category_detail' + ), + + # 分类详情分页路由:带页码的分类页(如 /category/tech/2.html) + path( + r'category//.html', + views.CategoryDetailView.as_view(), # 复用分类视图类,通过 page 参数分页 + name='category_detail_page' + ), + + # 作者详情页路由:按作者名匹配(如 /author/alice.html) + path( + r'author/.html', + # :未指定类型,默认接收字符串(除特殊字符外) + views.AuthorDetailView.as_view(), # 作者详情视图类,展示该作者的文章 + name='author_detail' + ), + + # 作者详情分页路由:带页码的作者页(如 /author/alice/2.html) + path( + r'author//.html', + views.AuthorDetailView.as_view(), # 复用作者视图类,通过 page 参数分页 + name='author_detail_page' + ), + + # 标签详情页路由:按标签名匹配(如 /tag/python.html) + path( + r'tag/.html', + views.TagDetailView.as_view(), # 标签详情视图类,展示该标签下的文章 + name='tag_detail' + ), + + # 标签详情分页路由:带页码的标签页(如 /tag/python/2.html) + path( + r'tag//.html', + views.TagDetailView.as_view(), # 复用标签视图类,通过 page 参数分页 + name='tag_detail_page' + ), + + # 归档页路由:匹配 /archives.html + path( + 'archives.html', + # 缓存装饰器:cache_page(60*60) 表示缓存该页面1小时(60秒*60),减轻服务器压力 + cache_page(60 * 60)(views.ArchivesView.as_view()), + name='archives' # 归档视图,通常展示按日期分组的文章列表 + ), + + # 友情链接页路由:匹配 /links.html + path( + 'links.html', + views.LinkListView.as_view(), # 友情链接视图类,展示网站链接列表 + name='links' + ), + + # 文件上传路由:匹配 /upload + path( + r'upload', + views.fileupload, # 关联函数视图(非类视图),处理文件上传逻辑 + name='upload' + ), + + # 缓存清理路由:匹配 /clean + path( + r'clean', + views.clean_cache_view, # 关联缓存清理视图,用于手动触发缓存清理 + name='clean' + ), +] +======= from django.urls import path from django.views.decorators.cache import cache_page @@ -60,3 +170,4 @@ urlpatterns = [ views.clean_cache_view, name='clean'), ] +>>>>>>> ccy_branch