From e3c84e849a2c96f2efa44c1cefe4af6254ffcf43 Mon Sep 17 00:00:00 2001 From: ccy_branch <531334290@qq.com> Date: Sat, 8 Nov 2025 23:54:10 +0800 Subject: [PATCH 1/6] =?UTF-8?q?ccy=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DjangoBlog-master/blog/urls.py | 120 +++++++++++++++++- 1 file changed, 114 insertions(+), 6 deletions(-) diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py index adf2703..dd95739 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py @@ -1,62 +1,170 @@ -from django.urls import path -from django.views.decorators.cache import cache_page +# ccy: 博客应用URL配置模块 +# ccy: 定义博客应用的所有URL路由和对应的视图函数 +# ccy: 第一部分URL配置 -from . import views - -app_name = "blog" +app_name = "blog" # ccy: 定义应用命名空间为'blog' urlpatterns = [ + # ccy: 首页路由 - 显示博客文章列表 path( r'', views.IndexView.as_view(), name='index'), + + # ccy: 分页首页路由 - 显示指定页码的文章列表 path( r'page//', views.IndexView.as_view(), name='index_page'), + + # ccy: 文章详情页路由 - 根据年月日和文章ID显示具体文章内容 path( r'article////.html', views.ArticleDetailView.as_view(), name='detailbyid'), + + # ccy: 分类详情页路由 - 显示指定分类下的所有文章 path( r'category/.html', views.CategoryDetailView.as_view(), name='category_detail'), + + # ccy: 分类分页路由 - 显示指定分类下指定页码的文章 path( r'category//.html', views.CategoryDetailView.as_view(), name='category_detail_page'), + + # ccy: 作者详情页路由 - 显示指定作者的所有文章 path( r'author/.html', views.AuthorDetailView.as_view(), name='author_detail'), + + # ccy: 作者分页路由 - 显示指定作者下指定页码的文章 path( r'author//.html', views.AuthorDetailView.as_view(), name='author_detail_page'), + + # ccy: 标签详情页路由 - 显示指定标签下的所有文章 path( r'tag/.html', views.TagDetailView.as_view(), name='tag_detail'), + + # ccy: 标签分页路由 - 显示指定标签下指定页码的文章 path( r'tag//.html', views.TagDetailView.as_view(), name='tag_detail_page'), + + # ccy: 归档页面路由 - 显示所有文章的归档,使用缓存加速(缓存1小时) path( 'archives.html', cache_page( - 60 * 60)( + 60 * 60)( # ccy: 设置缓存时间为60分钟 views.ArchivesView.as_view()), name='archives'), + + # ccy: 友情链接页面路由 - 显示所有友情链接 path( 'links.html', views.LinkListView.as_view(), name='links'), + + # ccy: 文件上传功能路由 - 处理文件上传请求 path( r'upload', views.fileupload, name='upload'), + + # ccy: 缓存清理功能路由 - 清理系统缓存 path( r'clean', views.clean_cache_view, name='clean'), ] + + +app_name = "blog" # ccy: 重复定义应用命名空间为'blog' +urlpatterns = [ + # ccy: 首页路由 - 显示博客文章列表 + path( + r'', + views.IndexView.as_view(), + name='index'), + + # ccy: 分页首页路由 - 显示指定页码的文章列表 + path( + r'page//', + views.IndexView.as_view(), + name='index_page'), + + # ccy: 文章详情页路由 - 根据年月日和文章ID显示具体文章内容 + path( + r'article////.html', + views.ArticleDetailView.as_view(), + name='detailbyid'), + + # ccy: 分类详情页路由 - 显示指定分类下的所有文章 + path( + r'category/.html', + views.CategoryDetailView.as_view(), + name='category_detail'), + + # ccy: 分类分页路由 - 显示指定分类下指定页码的文章 + path( + r'category//.html', + views.CategoryDetailView.as_view(), + name='category_detail_page'), + + # ccy: 作者详情页路由 - 显示指定作者的所有文章 + path( + r'author/.html', + views.AuthorDetailView.as_view(), + name='author_detail'), + + # ccy: 作者分页路由 - 显示指定作者下指定页码的文章 + path( + r'author//.html', + views.AuthorDetailView.as_view(), + name='author_detail_page'), + + # ccy: 标签详情页路由 - 显示指定标签下的所有文章 + path( + r'tag/.html', + views.TagDetailView.as_view(), + name='tag_detail'), + + # ccy: 标签分页路由 - 显示指定标签下指定页码的文章 + path( + r'tag//.html', + views.TagDetailView.as_view(), + name='tag_detail_page'), + + # ccy: 归档页面路由 - 显示所有文章的归档,使用缓存加速(缓存1小时) + path( + 'archives.html', + cache_page( + 60 * 60)( # ccy: 设置缓存时间为60分钟 + views.ArchivesView.as_view()), + name='archives'), + + # ccy: 友情链接页面路由 - 显示所有友情链接 + path( + 'links.html', + views.LinkListView.as_view(), + name='links'), + + # ccy: 文件上传功能路由 - 处理文件上传请求 + path( + r'upload', + views.fileupload, + name='upload'), + + # ccy: 缓存清理功能路由 - 清理系统缓存 + path( + r'clean', + views.clean_cache_view, + name='clean'), +] \ No newline at end of file -- 2.34.1 From ee7129bac9a2ab1d87e08c0057e1610c81c362df Mon Sep 17 00:00:00 2001 From: ccy_branch <531334290@qq.com> Date: Sun, 9 Nov 2025 00:02:00 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DjangoBlog-master/blog/urls.py | 153 +++++++++--------- 1 file changed, 78 insertions(+), 75 deletions(-) diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py index dd95739..bc2b364 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py @@ -1,170 +1,173 @@ -# ccy: 博客应用URL配置模块 -# ccy: 定义博客应用的所有URL路由和对应的视图函数 -# ccy: 第一部分URL配置 +<<<<<<< HEAD +# 导入 Django 内置的路径配置工具和缓存装饰器 +from django.urls import path +from django.views.decorators.cache import cache_page -app_name = "blog" # ccy: 定义应用命名空间为'blog' +# 导入当前应用(blog)的视图模块,用于关联路由与视图逻辑 +from . import views + +# 定义应用命名空间(namespace),用于在模板或反向解析时区分不同应用的路由 +# 例如:在模板中使用 {% url 'blog:index' %} 生成首页链接 +app_name = "blog" + +# 路由配置列表,每个 path 对应一个 URL 规则与视图的映射 urlpatterns = [ - # ccy: 首页路由 - 显示博客文章列表 + # 首页路由:匹配根路径(网站域名/) path( - r'', - views.IndexView.as_view(), - name='index'), + r'', # URL 路径表达式,空字符串表示根路径 + views.IndexView.as_view(), # 关联的视图类(IndexView),通过 as_view() 转换为可调用视图 + name='index' # 路由名称,用于反向解析(如 reverse('blog:index')) + ), - # ccy: 分页首页路由 - 显示指定页码的文章列表 + # 分页首页路由:匹配带页码的首页(如 /page/2/) path( - r'page//', - views.IndexView.as_view(), - name='index_page'), + r'page//', # 是路径参数,int 表示接收整数类型,page 是参数名 + views.IndexView.as_view(), # 复用首页视图类,视图中会通过 page 参数处理分页 + name='index_page' + ), - # ccy: 文章详情页路由 - 根据年月日和文章ID显示具体文章内容 + # 文章详情页路由:按日期和文章ID匹配(如 /article/2023/10/20/100.html) path( r'article////.html', - views.ArticleDetailView.as_view(), - name='detailbyid'), + # 路径参数:year(年)、month(月)、day(日)、article_id(文章ID),均为整数 + views.ArticleDetailView.as_view(), # 文章详情视图类,处理文章展示逻辑 + name='detailbyid' + ), - # ccy: 分类详情页路由 - 显示指定分类下的所有文章 + # 分类详情页路由:按分类名匹配(如 /category/tech.html) path( r'category/.html', - views.CategoryDetailView.as_view(), - name='category_detail'), + # :slug 类型表示接收字母、数字、下划线和连字符组成的字符串(适合URL友好的名称) + views.CategoryDetailView.as_view(), # 分类详情视图类,展示该分类下的文章 + name='category_detail' + ), - # ccy: 分类分页路由 - 显示指定分类下指定页码的文章 + # 分类详情分页路由:带页码的分类页(如 /category/tech/2.html) path( r'category//.html', - views.CategoryDetailView.as_view(), - name='category_detail_page'), + views.CategoryDetailView.as_view(), # 复用分类视图类,通过 page 参数分页 + name='category_detail_page' + ), - # ccy: 作者详情页路由 - 显示指定作者的所有文章 + # 作者详情页路由:按作者名匹配(如 /author/alice.html) path( r'author/.html', - views.AuthorDetailView.as_view(), - name='author_detail'), + # :未指定类型,默认接收字符串(除特殊字符外) + views.AuthorDetailView.as_view(), # 作者详情视图类,展示该作者的文章 + name='author_detail' + ), - # ccy: 作者分页路由 - 显示指定作者下指定页码的文章 + # 作者详情分页路由:带页码的作者页(如 /author/alice/2.html) path( r'author//.html', - views.AuthorDetailView.as_view(), - name='author_detail_page'), + views.AuthorDetailView.as_view(), # 复用作者视图类,通过 page 参数分页 + name='author_detail_page' + ), - # ccy: 标签详情页路由 - 显示指定标签下的所有文章 + # 标签详情页路由:按标签名匹配(如 /tag/python.html) path( r'tag/.html', - views.TagDetailView.as_view(), - name='tag_detail'), + views.TagDetailView.as_view(), # 标签详情视图类,展示该标签下的文章 + name='tag_detail' + ), - # ccy: 标签分页路由 - 显示指定标签下指定页码的文章 + # 标签详情分页路由:带页码的标签页(如 /tag/python/2.html) path( r'tag//.html', - views.TagDetailView.as_view(), - name='tag_detail_page'), + views.TagDetailView.as_view(), # 复用标签视图类,通过 page 参数分页 + name='tag_detail_page' + ), - # ccy: 归档页面路由 - 显示所有文章的归档,使用缓存加速(缓存1小时) + # 归档页路由:匹配 /archives.html path( 'archives.html', - cache_page( - 60 * 60)( # ccy: 设置缓存时间为60分钟 - views.ArchivesView.as_view()), - name='archives'), + # 缓存装饰器:cache_page(60*60) 表示缓存该页面1小时(60秒*60),减轻服务器压力 + cache_page(60 * 60)(views.ArchivesView.as_view()), + name='archives' # 归档视图,通常展示按日期分组的文章列表 + ), - # ccy: 友情链接页面路由 - 显示所有友情链接 + # 友情链接页路由:匹配 /links.html path( 'links.html', - views.LinkListView.as_view(), - name='links'), + views.LinkListView.as_view(), # 友情链接视图类,展示网站链接列表 + name='links' + ), - # ccy: 文件上传功能路由 - 处理文件上传请求 + # 文件上传路由:匹配 /upload path( r'upload', - views.fileupload, - name='upload'), + views.fileupload, # 关联函数视图(非类视图),处理文件上传逻辑 + name='upload' + ), - # ccy: 缓存清理功能路由 - 清理系统缓存 + # 缓存清理路由:匹配 /clean path( r'clean', - views.clean_cache_view, - name='clean'), + views.clean_cache_view, # 关联缓存清理视图,用于手动触发缓存清理 + name='clean' + ), ] +======= +from django.urls import path +from django.views.decorators.cache import cache_page +from . import views -app_name = "blog" # ccy: 重复定义应用命名空间为'blog' +app_name = "blog" urlpatterns = [ - # ccy: 首页路由 - 显示博客文章列表 path( r'', views.IndexView.as_view(), name='index'), - - # ccy: 分页首页路由 - 显示指定页码的文章列表 path( r'page//', views.IndexView.as_view(), name='index_page'), - - # ccy: 文章详情页路由 - 根据年月日和文章ID显示具体文章内容 path( r'article////.html', views.ArticleDetailView.as_view(), name='detailbyid'), - - # ccy: 分类详情页路由 - 显示指定分类下的所有文章 path( r'category/.html', views.CategoryDetailView.as_view(), name='category_detail'), - - # ccy: 分类分页路由 - 显示指定分类下指定页码的文章 path( r'category//.html', views.CategoryDetailView.as_view(), name='category_detail_page'), - - # ccy: 作者详情页路由 - 显示指定作者的所有文章 path( r'author/.html', views.AuthorDetailView.as_view(), name='author_detail'), - - # ccy: 作者分页路由 - 显示指定作者下指定页码的文章 path( r'author//.html', views.AuthorDetailView.as_view(), name='author_detail_page'), - - # ccy: 标签详情页路由 - 显示指定标签下的所有文章 path( r'tag/.html', views.TagDetailView.as_view(), name='tag_detail'), - - # ccy: 标签分页路由 - 显示指定标签下指定页码的文章 path( r'tag//.html', views.TagDetailView.as_view(), name='tag_detail_page'), - - # ccy: 归档页面路由 - 显示所有文章的归档,使用缓存加速(缓存1小时) path( 'archives.html', cache_page( - 60 * 60)( # ccy: 设置缓存时间为60分钟 + 60 * 60)( views.ArchivesView.as_view()), name='archives'), - - # ccy: 友情链接页面路由 - 显示所有友情链接 path( 'links.html', views.LinkListView.as_view(), name='links'), - - # ccy: 文件上传功能路由 - 处理文件上传请求 path( r'upload', views.fileupload, name='upload'), - - # ccy: 缓存清理功能路由 - 清理系统缓存 path( r'clean', views.clean_cache_view, name='clean'), -] \ No newline at end of file +] +>>>>>>> ccy_branch \ No newline at end of file -- 2.34.1 From 4c18c6bb3479aafc000731a29a538bd1d8d779f9 Mon Sep 17 00:00:00 2001 From: djq <1092424998@qq.com> Date: Sun, 9 Nov 2025 00:39:22 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py index bc2b364..44bb441 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py @@ -170,4 +170,4 @@ urlpatterns = [ views.clean_cache_view, name='clean'), ] ->>>>>>> ccy_branch \ No newline at end of file +>>>>>>> ccy_branch -- 2.34.1 From f3a2e6cac1f6291b1eeeff20a38cb44c3b45745b Mon Sep 17 00:00:00 2001 From: ccy_branch <531334290@qq.com> Date: Sun, 9 Nov 2025 00:48:50 +0800 Subject: [PATCH 4/6] =?UTF-8?q?ccy=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DjangoBlog-master/comments/models.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/comments/models.py b/src/DjangoBlog-master(1)/DjangoBlog-master/comments/models.py index 7c3bbc8..796d1cc 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/comments/models.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/comments/models.py @@ -8,32 +8,46 @@ from blog.models import Article # Create your models here. +#ccy: 评论模块 - 定义博客文章的评论数据模型,支持多级回复功能 class Comment(models.Model): + #ccy: 评论正文内容,最大长度300字符 body = models.TextField('正文', max_length=300) + #ccy: 评论创建时间,自动设置为当前时间 creation_time = models.DateTimeField(_('creation time'), default=now) + #ccy: 评论最后修改时间,自动更新为当前时间 last_modify_time = models.DateTimeField(_('last modify time'), default=now) + #ccy: 评论作者,关联用户模型,删除用户时级联删除其评论 author = models.ForeignKey( settings.AUTH_USER_MODEL, verbose_name=_('author'), on_delete=models.CASCADE) + #ccy: 所属文章,关联文章模型,删除文章时级联删除相关评论 article = models.ForeignKey( Article, verbose_name=_('article'), on_delete=models.CASCADE) + #ccy: 父级评论,支持评论回复功能,允许为空表示顶级评论 parent_comment = models.ForeignKey( 'self', verbose_name=_('parent comment'), blank=True, null=True, on_delete=models.CASCADE) + #ccy: 评论启用状态,控制评论是否可见 is_enable = models.BooleanField(_('enable'), default=False, blank=False, null=False) + #ccy: Meta类 - 定义评论模型的元数据配置 class Meta: + #ccy: 按ID降序排列,新的评论显示在前面 ordering = ['-id'] + #ccy: 单数模型名称 verbose_name = _('comment') + #ccy: 复数模型名称 verbose_name_plural = verbose_name + #ccy: 指定获取最新记录的依据字段 get_latest_by = 'id' + #ccy: 字符串表示方法,返回评论正文内容 def __str__(self): - return self.body + return self.body \ No newline at end of file -- 2.34.1 From a0a3c886b3ce7ad9490a1ae6edfb7d29d609cc28 Mon Sep 17 00:00:00 2001 From: djq <1092424998@qq.com> Date: Sun, 9 Nov 2025 00:54:28 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DjangoBlog-master/comments/models.py | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/comments/models.py b/src/DjangoBlog-master(1)/DjangoBlog-master/comments/models.py index 796d1cc..7c3bbc8 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/comments/models.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/comments/models.py @@ -8,46 +8,32 @@ from blog.models import Article # Create your models here. -#ccy: 评论模块 - 定义博客文章的评论数据模型,支持多级回复功能 class Comment(models.Model): - #ccy: 评论正文内容,最大长度300字符 body = models.TextField('正文', max_length=300) - #ccy: 评论创建时间,自动设置为当前时间 creation_time = models.DateTimeField(_('creation time'), default=now) - #ccy: 评论最后修改时间,自动更新为当前时间 last_modify_time = models.DateTimeField(_('last modify time'), default=now) - #ccy: 评论作者,关联用户模型,删除用户时级联删除其评论 author = models.ForeignKey( settings.AUTH_USER_MODEL, verbose_name=_('author'), on_delete=models.CASCADE) - #ccy: 所属文章,关联文章模型,删除文章时级联删除相关评论 article = models.ForeignKey( Article, verbose_name=_('article'), on_delete=models.CASCADE) - #ccy: 父级评论,支持评论回复功能,允许为空表示顶级评论 parent_comment = models.ForeignKey( 'self', verbose_name=_('parent comment'), blank=True, null=True, on_delete=models.CASCADE) - #ccy: 评论启用状态,控制评论是否可见 is_enable = models.BooleanField(_('enable'), default=False, blank=False, null=False) - #ccy: Meta类 - 定义评论模型的元数据配置 class Meta: - #ccy: 按ID降序排列,新的评论显示在前面 ordering = ['-id'] - #ccy: 单数模型名称 verbose_name = _('comment') - #ccy: 复数模型名称 verbose_name_plural = verbose_name - #ccy: 指定获取最新记录的依据字段 get_latest_by = 'id' - #ccy: 字符串表示方法,返回评论正文内容 def __str__(self): - return self.body \ No newline at end of file + return self.body -- 2.34.1 From d106f2009248d57c5a593227c5a1c166c122c759 Mon Sep 17 00:00:00 2001 From: ccy_branch <531334290@qq.com> Date: Sun, 9 Nov 2025 01:00:30 +0800 Subject: [PATCH 6/6] =?UTF-8?q?ccy=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DjangoBlog-master/accounts/models.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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 -- 2.34.1