From 0d0fb564d6860fb760dbbfa25c1a581e8ecf828d Mon Sep 17 00:00:00 2001 From: plhw57tbe <2723863608@qq.com> Date: Sun, 19 Oct 2025 23:18:15 +0800 Subject: [PATCH] Update feeds.py --- src/DjangoBlog-master/djangoblog/feeds.py | 31 +++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/DjangoBlog-master/djangoblog/feeds.py b/src/DjangoBlog-master/djangoblog/feeds.py index 8c4e851..d8e09ae 100644 --- a/src/DjangoBlog-master/djangoblog/feeds.py +++ b/src/DjangoBlog-master/djangoblog/feeds.py @@ -1,40 +1,61 @@ +# 导入 Django 用户模型工具:获取当前项目的用户模型(支持自定义用户模型) from django.contrib.auth import get_user_model +# 导入 Django 内置的 Feed 基类:用于快速实现 RSS/Atom 订阅功能 from django.contrib.syndication.views import Feed +# 导入 Django 时间工具:处理时区和当前时间 from django.utils import timezone +# 导入 RSS 2.0 格式生成器:指定 Feed 输出格式为 RSS 2.0 标准 from django.utils.feedgenerator import Rss201rev2Feed +# 导入博客核心模型和工具:关联文章数据及 Markdown 解析 from blog.models import Article -from djangoblog.utils import CommonMarkdown +from djangoblog.utils import CommonMarkdown # 自定义 Markdown 解析工具(将文章内容转为 HTML) +# 自定义 RSS Feed 类:继承 Django 内置 Feed 类,实现博客文章的订阅功能 class DjangoBlogFeed(Feed): + # 指定 Feed 生成器类型:使用 RSS 2.0 标准格式(最常用的 RSS 版本) feed_type = Rss201rev2Feed + # Feed 描述信息:显示在订阅源的说明中 description = '大巧无工,重剑无锋.' + # Feed 标题:订阅源的名称(通常为博客名称) title = "且听风吟 大巧无工,重剑无锋. " + # Feed 的链接:订阅源自身的 URL(通常指向博客首页或 Feed 专属页面) link = "/feed/" + # 订阅源作者名称:从系统第一个用户的昵称获取(适合个人博客) def author_name(self): return get_user_model().objects.first().nickname + # 订阅源作者链接:指向作者的个人页面(通过用户模型的 get_absolute_url 方法获取) def author_link(self): return get_user_model().objects.first().get_absolute_url() + # 订阅源包含的项目(文章):定义要展示在 Feed 中的内容 def items(self): + # 筛选条件:类型为文章(type='a')、状态为已发布(status='p') + # 排序规则:按发布时间倒序(最新发布的文章在前) + # 数量限制:只显示最新的 5 篇文章 return Article.objects.filter(type='a', status='p').order_by('-pub_time')[:5] + # 单个项目(文章)的标题:使用文章自身的标题 def item_title(self, item): return item.title + # 单个项目(文章)的描述:将 Markdown 格式的文章内容转为 HTML 后展示 def item_description(self, item): - return CommonMarkdown.get_markdown(item.body) + return CommonMarkdown.get_markdown(item.body) # 调用工具类解析 Markdown + # 订阅源的版权信息:动态生成包含当前年份的版权声明 def feed_copyright(self): - now = timezone.now() - return "Copyright© {year} 且听风吟".format(year=now.year) + now = timezone.now() # 获取当前时间(带时区) + return "Copyright© {year} 且听风吟".format(year=now.year) # 格式化版权信息 + # 单个项目(文章)的链接:指向文章详情页(通过文章模型的 get_absolute_url 方法获取) def item_link(self, item): return item.get_absolute_url() + # 单个项目(文章)的唯一标识(GUID):此处留空,Django 会默认使用 item_link 作为 GUID def item_guid(self, item): - return + return \ No newline at end of file