Rust博客实战 | 详细功能清单及开发计划(deepseek生成版)

寻龙剑侠 2025-11-20 22:36:52 71 阅读 Rust

Rust博客实战 | 详细功能清单及开发计划(deepseek生成版)基于Rust开发个人博客,使用deepseek生成博客功能清单和开发计划

其实使用Rust进行实战开发,我已经完成了基本的核心功能,就是现在我的个人博客网站当前的版本:

  1. 后端使用了Rust+sqlx+actix等插件进行后台代码开发

  2. 后台管理界面则是使用了Ruoyi的Vue3 版本

  3. 博客开发页面使用的html+css+JavaScript做展示

  4. 自己写了一个将工具类,使用模板将markdown格式的博文转为静态的html页面

至于为什么这么折腾就像我在完成Rust版本博客部署后,发布的第一篇文章《关于本站第一篇文章》说的那样,一方面是因为原来使用halo部署的博客,在进行升级后,总是莫名其妙的程序挂掉,难以忍受是不是就需要重启,一方面是因为自学了Rust,但是工作上基本用不到,因此有了自己开发一个博客系统,自己练手。

2025年10月国庆期间,闲着无聊,并且应为第一版的样式自己也不忍直视了,碰巧在研究豆包AI助手,就用它生成了现在看到的样式。现在又抽出时间来了,准备重新系统地规划,把整个博客系统进行再次重构,功能细分、增加后续升级扩展的便捷性,因为不可能每次开发新的功能还需要动刀以前写好的功能的代码。另外我也想在完善后把它进行开源,实现自己开源项目零突破。


详细功能清单

将功能分为四个核心模块,遵循 MVP(最小可行产品)到功能完善的演进路线。

一、 详细功能清单

我们将功能分为四个核心模块,遵循 MVP(最小可行产品)到功能完善的演进路线。

阶段一:核心 MVP (v0.1.0) - 基础内容管理

这个阶段的目标是打造一个“能用的博客”,具备最核心的写作和展示功能。

  1. 后端 (rhai-server)

    • 认证与授权:

      • 用户注册/登录 (JWT Token)

      • 密码加密 (使用 argon2 库)

    • 内容管理:

      • 文章(Post) 的 CRUD (创建、读取、更新、删除)

      • 支持 Markdown 格式编写和存储

      • 将 Markdown 渲染为 HTML (使用 pulldown-cmark 库)

      • 文章状态管理(草稿、已发布)

    • 数据持久化:

      • 使用 SQLite (开发环境) / PostgreSQL (生产环境) 作为数据库

      • 使用 sqlx 库进行数据库操作

    • RESTful API:

      • GET /api/posts - 获取文章列表 (分页)

      • GET /api/posts/{id} - 获取单篇文章

      • POST /api/posts - 创建文章 (需认证)

      • PUT /api/posts/{id} - 更新文章 (需认证)

      • DELETE /api/posts/{id} - 删除文章 (需认证)

      • POST /api/auth/login - 登录

      • POST /api/auth/register - 注册

  2. 前端 (rhai-admin) - 管理后台

    • SPA (单页应用),建议使用 React + Vite + TypeScript 或 Yew (Rust WASM框架,可选)。

    • 登录页面

    • 文章列表页面 (带分页和删除操作)

    • 文章编辑/创建页面 (简单的 Markdown 编辑器,如 SimpleMDE 或 CodeMirror)

    • 仪表盘首页 (显示基本数据统计)

  3. 前端 (rhai-theme) - 博客主题

    • 一个简单的、响应式的静态主题,用于公开访问博客。

    • 首页:显示文章列表

    • 文章详情页:渲染 Markdown 内容

    • 使用模板引擎 (如 Tera 或 Askama) 在后端渲染 HTML,或者构建成纯静态站点(后续阶段)。

阶段二:基础完善 (v0.2.0 - v0.5.0) - 增强内容与社区

在 MVP 基础上,增加博客的必备功能和社区互动元素。

  1. 内容扩展:

    • 分类与标签: 为文章添加分类和标签系统。

    • 独立页面: 创建“关于”、“友链”等独立页面。

    • 媒体库: 支持图片上传、管理和预览,提供简单的 API。

    • 定时发布: 支持为文章设置未来的发布时间。

  2. 评论系统:

    • 读者可以对文章发表评论。

    • 支持评论树形结构(楼中楼)。

    • 后台评论审核(通过/驳回/删除)。

    • 防垃圾评论基础逻辑。

  3. 管理与配置:

    • 系统设置: 通过后台配置博客名称、描述、Logo 等。

    • 用户管理: 多用户支持与角色权限控制(管理员、编辑)。

    • 数据备份与恢复: 导出/导入 JSON 或 SQL 格式的数据。

  4. SEO 优化:

    • 自动生成 sitemap.xml 和 robots.txt。

    • 为每篇文章和页面生成唯一的 </code> 和 <code><meta description></code>。</p></li></ul></li></ol><h4 data-lines="2" data-sign="97050079e657202c83923d2af9fc63c380aa28f33b4a108812e0d4801c3d14cc" id="%E9%98%B6%E6%AE%B5%E4%B8%89%EF%BC%9A%E9%AB%98%E7%BA%A7%E7%89%B9%E6%80%A7-v100-%E5%8F%AF%E6%89%A9%E5%B1%95%E6%80%A7%E4%B8%8E%E7%8E%B0%E4%BB%A3%E5%8C%96"><a href="#%E9%98%B6%E6%AE%B5%E4%B8%89%EF%BC%9A%E9%AB%98%E7%BA%A7%E7%89%B9%E6%80%A7-v100-%E5%8F%AF%E6%89%A9%E5%B1%95%E6%80%A7%E4%B8%8E%E7%8E%B0%E4%BB%A3%E5%8C%96" class="anchor"></a>阶段三:高级特性 (v1.0.0+) - 可扩展性与现代化</h4><p data-lines="2" data-type="p" data-sign="619f465068b8a803159fc01e6b2fb58e3fb7f6f7990fe273941b30c59ac9f28b2">向 Halo 看齐,打造一个真正强大和可扩展的系统。</p><ol class="cherry-list__default" start="1" data-sign="43c7d632e39119fdf1ce821ed6038339e245b5d69cc33f22a6a4e30652594627" data-lines="13"><li class="cherry-list-item"><p><strong>插件系统</strong>:</p><ul class="cherry-list__default"><li class="cherry-list-item"><p>设计一个安全的、基于 WebAssembly 的插件运行时。</p></li><li class="cherry-list-item"><p>定义标准的插件接口,允许插件扩展 API、添加后台菜单等。</p></li><li class="cherry-list-item"><p>这是最具挑战性但也是区分度最高的功能。</p></li></ul></li><li class="cherry-list-item"><p><strong>主题系统</strong>:</p><ul class="cherry-list__default"><li class="cherry-list-item"><p>完善的主题管理和热切换机制。</p></li><li class="cherry-list-item"><p>定义主题的配置文件和挂载点,使主题更灵活。</p></li></ul></li><li class="cherry-list-item"><p><strong>API 扩展</strong>:</p><ul class="cherry-list__default"><li class="cherry-list-item"><p>完善并标准化所有 RESTful API。</p></li><li class="cherry-list-item"><p>考虑提供 GraphQL API 作为可选功能。</p></li></ul></li><li class="cherry-list-item"><p><strong>部署优化</strong>:</p><ul class="cherry-list__default"><li class="cherry-list-item"><p>提供官方的 Docker 镜像。</p></li><li class="cherry-list-item"><p>支持更多的数据库和存储后端(如 MySQL, Redis 用于缓存)。</p></li></ul></li></ol><span data-lines="2" data-type="br" data-sign="br2"></span><hr data-lines="1" data-sign="hr1"><h3 data-lines="1" data-sign="22a5e5c9862f5f01245001db0e663b0822e744c7c53c37cb5bad8b0d0bce5c2f" id="%E4%BA%8C%E3%80%81-%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%8A%80%E6%9C%AF%E6%A0%88%E4%B8%8E%E6%89%A7%E8%A1%8C%E5%88%97%E8%A1%A8"><a href="#%E4%BA%8C%E3%80%81-%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%8A%80%E6%9C%AF%E6%A0%88%E4%B8%8E%E6%89%A7%E8%A1%8C%E5%88%97%E8%A1%A8" class="anchor"></a>二、 可执行技术栈与执行列表</h3><h4 data-lines="2" data-sign="05a082b0157299f34d8ba000a410a463c86b1824ab185f167d8e641872c6a97b" id="%E6%8A%80%E6%9C%AF%E6%A0%88%E9%80%89%E6%8B%A9"><a href="#%E6%8A%80%E6%9C%AF%E6%A0%88%E9%80%89%E6%8B%A9" class="anchor"></a>技术栈选择</h4><ul class="cherry-list__default" data-sign="10308a847afc9d8081d381002c81cc1d0cd5b3752cc3e22756b7917700650919" data-lines="9"><li class="cherry-list-item"><p><strong>Web 框架</strong>: <code>Axum</code> (高性能、符合 Ergonomic 设计)</p></li><li class="cherry-list-item"><p><strong>数据库 ORM/工具</strong>: <code>sqlx</code> (编译时检查 SQL, 支持异步)</p></li><li class="cherry-list-item"><p><strong>认证</strong>: <code>JWT</code>, 使用 <code>jsonwebtoken</code> 库</p></li><li class="cherry-list-item"><p><strong>Markdown 渲染</strong>: <code>pulldown-cmark</code></p></li><li class="cherry-list-item"><p><strong>模板引擎</strong> (SSR): <code>Tera</code> (类似 Jinja2)</p></li><li class="cherry-list-item"><p><strong>配置管理</strong>: <code>config</code> 库</p></li><li class="cherry-list-item"><p><strong>日志</strong>: <code>tracing</code></p></li><li class="cherry-list-item"><p><strong>命令行解析</strong>: <code>clap</code> (用于创建管理命令行工具)</p></li></ul><h4 data-lines="2" data-sign="3d0d9068b72be58e5fede4b54e9382603248c481ce28c02e6c807f37888a03bd" id="%E6%89%A7%E8%A1%8C%E5%88%97%E8%A1%A8%EF%BC%88%E4%BB%A5%E9%98%B6%E6%AE%B5%E4%B8%80%E4%B8%BA%E4%BE%8B%EF%BC%89"><a href="#%E6%89%A7%E8%A1%8C%E5%88%97%E8%A1%A8%EF%BC%88%E4%BB%A5%E9%98%B6%E6%AE%B5%E4%B8%80%E4%B8%BA%E4%BE%8B%EF%BC%89" class="anchor"></a>执行列表(以阶段一为例)</h4><p data-lines="2" data-type="p" data-sign="2e3ea206cd179f813a91ff2fe35f3630853b3150545d95b69b9075b5d823a9992"><strong>第一步:项目初始化 (1-2 天)</strong></p><ol class="cherry-list__default" start="1" data-sign="99253eb72f306879e2b9349d9f6a4a9ffd546c8501135dc7a4a9d2f1aa623aaf" data-lines="20"><li class="cherry-list-item"><p>使用 <code>cargo new rhai-server</code> 和 <code>cargo new rhai-cli</code> (用于管理命令) 创建项目。</p></li><li class="cherry-list-item"><p>配置 <code>Cargo.toml</code>, 添加上述依赖。</p></li><li class="cherry-list-item"><p>设置项目目录结构, 遵循清晰的模块化原则,例如:<br>text<br></p><div data-sign="8dc56929145241be9265e029f70078fe3bef48e7562e95072694dfddf1367aa4" data-type="codeBlock" data-lines="15" data-edit-code="true" data-copy-code="true" data-expand-code="false" data-change-lang="true" data-lang="" style="position:relative" class="cherry-code-expand"> <pre class="language-javascript"><code class="language-javascript"><span class="code-line"> src<span class="token operator">/</span></span> <span class="code-line"> ├── main<span class="token punctuation">.</span><span class="token property-access">rs</span></span> <span class="code-line"> ├── error<span class="token punctuation">.</span><span class="token property-access">rs</span> <span class="token comment">// 统一错误处理</span></span> <span class="code-line"> ├── config<span class="token punctuation">.</span><span class="token property-access">rs</span> <span class="token comment">// 配置加载</span></span> <span class="code-line"> ├── db<span class="token operator">/</span></span> <span class="code-line"> │ ├── mod<span class="token punctuation">.</span><span class="token property-access">rs</span></span> <span class="code-line"> │ └── model<span class="token punctuation">.</span><span class="token property-access">rs</span> <span class="token comment">// 数据库模型 (Post, User)</span></span> <span class="code-line"> ├── handler<span class="token operator">/</span></span> <span class="code-line"> │ ├── mod<span class="token punctuation">.</span><span class="token property-access">rs</span></span> <span class="code-line"> │ ├── auth<span class="token punctuation">.</span><span class="token property-access">rs</span></span> <span class="code-line"> │ └── post<span class="token punctuation">.</span><span class="token property-access">rs</span></span> <span class="code-line"> ├── router<span class="token punctuation">.</span><span class="token property-access">rs</span> <span class="token comment">// API 路由定义</span></span> <span class="code-line"> └── auth<span class="token punctuation">.</span><span class="token property-access">rs</span> <span class="token comment">// JWT 逻辑</span></span></code></pre> </div><p></p></li><li class="cherry-list-item"><p>编写数据库迁移脚本(使用 <code>sqlx-cli</code>)。</p></li></ol><p data-lines="2" data-type="p" data-sign="cd076e6fc25d194f387c43baea34c19751a0278f676e735a290d05a1002d2ca22"><strong>第二步:实现数据模型与数据库层 (3-4 天)</strong></p><ol class="cherry-list__default" start="1" data-sign="447dc1c9e8c9df9483afff88590a80e937af2590bf7b1b8a0ab3364c0d7de261" data-lines="3"><li class="cherry-list-item"><p>在 <code>db/model.rs</code> 中定义 <code>User</code> 和 <code>Post</code> 结构体。</p></li><li class="cherry-list-item"><p>使用 <code>sqlx</code> 编写数据库操作函数: <code>create_user</code>, <code>get_user_by_username</code>, <code>create_post</code>, <code>get_published_posts</code> 等。</p></li><li class="cherry-list-item"><p>编写统一的数据库连接池管理代码。</p></li></ol><p data-lines="2" data-type="p" data-sign="5eb7806a7b9db0b39d5485e57e822d6023b7c9860b2361467bda2242b88cc26f2"><strong>第三步:实现核心业务逻辑与 API (4-5 天)</strong></p><ol class="cherry-list__default" start="1" data-sign="54089602f34be05ffe8bc71b4d8637f3a18189236d7edc9781a294da9be1e324" data-lines="4"><li class="cherry-list-item"><p>在 <code>handler/auth.rs</code> 中实现 <code>login</code> 和 <code>register</code> 处理器。</p></li><li class="cherry-list-item"><p>在 <code>handler/post.rs</code> 中实现文章的 CRUD 处理器。</p></li><li class="cherry-list-item"><p>在 <code>router.rs</code> 中组装所有路由,并为需要认证的路由添加中间件。</p></li><li class="cherry-list-item"><p>实现 JWT 中间件,用于保护 API。</p></li></ol><p data-lines="2" data-type="p" data-sign="b79c930abd641a686b297432c5119536ec6ba0d995cff2a19ea4aa64a90180eb2"><strong>第四步:构建管理后台前端 (5-7 天)</strong></p><ol class="cherry-list__default" start="1" data-sign="a6522a5aabf6613a7291810aac6e75f5bc28cd430ae5b2082b88656ec733f856" data-lines="5"><li class="cherry-list-item"><p>使用 <code>npm create vite@latest rhai-admin</code> 搭建 React + TS 项目。</p></li><li class="cherry-list-item"><p>安装 UI 库(如 <code>Ant Design</code> 或 <code>Chakra UI</code>)加速开发。</p></li><li class="cherry-list-item"><p>创建页面:登录页、文章列表页、文章编辑页。</p></li><li class="cherry-list-item"><p>使用 <code>axios</code> 或 <code>fetch</code> 调用后端 API。</p></li><li class="cherry-list-item"><p>实现前端路由和基础状态管理。</p></li></ol><p data-lines="2" data-type="p" data-sign="613f285bd4cbba729e2f2e828feebeab53880cf4f2c0feeb1be0b40ddbe728a52"><strong>第五步:构建博客主题 (2-3 天)</strong></p><ol class="cherry-list__default" start="1" data-sign="490283303ac6295cb148956fd598c6296e6ba63717df76e675c5764a562e5c27" data-lines="3"><li class="cherry-list-item"><p>在后端使用 <code>Tera</code> 模板创建两个模板:<code>index.html</code> 和 <code>post.html</code>。</p></li><li class="cherry-list-item"><p>创建对应的 API 来渲染这些模板页面(例如 <code>GET /</code> 和 <code>GET /posts/{slug}</code>)。</p></li><li class="cherry-list-item"><p>编写 CSS, 确保主题是响应式的。</p></li></ol><p data-lines="2" data-type="p" data-sign="6068767e2ea276350ddb783e63ce5b4b72251eedbd73e60bd202b3afad882ce32"><strong>第六步:测试、集成与部署 (3-4 天)</strong></p><ol class="cherry-list__default" start="1" data-sign="b83ff69dee53f9ced9368c309a2b950acf0b8315a26ec9d418c94795f9c9bc7d" data-lines="4"><li class="cherry-list-item"><p>为关键的后端函数编写单元测试。</p></li><li class="cherry-list-item"><p>手动测试整个流程:注册 -> 登录 -> 写文章 -> 发布 -> 前台查看。</p></li><li class="cherry-list-item"><p>编写 <code>Dockerfile</code> 和 <code>docker-compose.yml</code>, 将应用容器化。</p></li><li class="cherry-list-item"><p>部署到一个测试服务器(如 VPS)上运行。</p></li></ol><span data-lines="2" data-type="br" data-sign="br2"></span><hr data-lines="1" data-sign="hr1"><h3 data-lines="1" data-sign="02dad5207d276c97459623225914f5ad4a15ec14695ffd9e89c0506e928b8b90" id="%E5%85%B3%E9%94%AE%E5%86%B3%E7%AD%96%E4%B8%8E%E5%BB%BA%E8%AE%AE"><a href="#%E5%85%B3%E9%94%AE%E5%86%B3%E7%AD%96%E4%B8%8E%E5%BB%BA%E8%AE%AE" class="anchor"></a>关键决策与建议</h3><ol class="cherry-list__default" start="1" data-sign="51189eaa9e3e0eb2367ee0bb8ff70c6833f09b23b0f4744e8fffbbe8fb0ebe4f" data-lines="9"><li class="cherry-list-item"><p><strong>从简开始</strong>: 第一个版本绝对不要追求大而全。一个只能发布和查看 Markdown 文章的博客,本身就是完整的。</p></li><li class="cherry-list-item"><p><strong>迭代开发</strong>: 严格按照阶段划分进行。完成一个阶段并稳定后,再进入下一个阶段。</p></li><li class="cherry-list-item"><p><strong>利用 Rust 生态</strong>: Rust 的 Web 生态已经非常成熟,<code>axum</code> + <code>sqlx</code> + <code>tokio</code> 是一个黄金组合。</p></li><li class="cherry-list-item"><p><strong>安全性</strong>: Rust 本身是内存安全的,但你仍需注意业务逻辑安全:</p><ul class="cherry-list__default"><li class="cherry-list-item"><p>使用 <code>argon2</code> 这类抗 GPU 破解的算法哈希密码。</p></li><li class="cherry-list-item"><p>对用户输入进行严格的验证和清理,防止 XSS(特别是在渲染 Markdown 时)。</p></li><li class="cherry-list-item"><p>使用 <code>sqlx</code> 的查询功能来避免 SQL 注入。</p></li></ul></li><li class="cherry-list-item"><p><strong>开源</strong>: 从第一天起就将代码托管在 GitHub 上。这不仅能获得社区的反馈和帮助,也是项目影响力的重要来源。</p></li></ol><p data-lines="2" data-type="p" data-sign="2e4ab62d3e7c52afdc02b53f9ae78a1912750aea03218112f8d3c9215a4222b42">这个路线图将宏大的目标分解为了可执行、可衡量的具体任务。按照这个计划,完全可以一步步地用 Rust 打造出一个功能强大、性能卓越的现代化博客系统。</p><span data-lines="3" data-type="br" data-sign="br3"></span></div> </div> <div class="mt-8 pt-6 border-t"> <div class="flex flex-wrap gap-2"> <span class="text-neutral-500 mr-2"><i class="fa fa-tags"></i> 标签:</span> <span class="px-3 py-1 bg-neutral-100 text-neutral-600 rounded-full text-sm hover:bg-primary hover:text-white transition-colors cursor-pointer">博客</span> <span class="px-3 py-1 bg-neutral-100 text-neutral-600 rounded-full text-sm hover:bg-primary hover:text-white transition-colors cursor-pointer">rust</span> </div> </div> <div class="mt-8 pt-6 border-t text-center"> <button type="button" id="like-btn" class="inline-flex items-center gap-2 px-6 py-2.5 rounded-full border border-neutral-200 text-neutral-600 hover:bg-primary hover:border-primary hover:text-white transition-colors disabled:opacity-60 disabled:cursor-not-allowed"> <i class="fa fa-thumbs-up"></i> <span>点赞</span> <span id="like-count">0</span> </button> </div> </div> </div> <div class="mt-8 bg-white rounded-xl shadow-sm p-6"> <h3 class="text-lg font-bold mb-4"><i class="fa fa-thumbs-up text-primary mr-2"></i>相关推荐</h3> <div class="grid grid-cols-1 md:grid-cols-2 gap-4" id="related_articles"> <a href="/database/1792422034141.html" class="flex gap-3 p-3 rounded-lg hover:bg-neutral-50 transition-colors"> <div class="flex-1"> <h4 class="font-medium text-neutral-800 line-clamp-2">Clickhouse集群版本升级方案及降级方案(实操)</h4> <p class="text-sm text-neutral-500 mt-1">2025-09-19T00:41:06</p> </div> </a> <a href="/rust/1792422928325.html" class="flex gap-3 p-3 rounded-lg hover:bg-neutral-50 transition-colors"> <div class="flex-1"> <h4 class="font-medium text-neutral-800 line-clamp-2">Rust实现网站Sitemap.xml教程</h4> <p class="text-sm text-neutral-500 mt-1">2025-04-29T22:25:21</p> </div> </a> <a href="/blog/1792422129960.html" class="flex gap-3 p-3 rounded-lg hover:bg-neutral-50 transition-colors"> <div class="flex-1"> <h4 class="font-medium text-neutral-800 line-clamp-2">Nginx配置文件上传大小限制</h4> <p class="text-sm text-neutral-500 mt-1">2025-04-28T22:58:10</p> </div> </a> <a href="/rust/1792422182232.html" class="flex gap-3 p-3 rounded-lg hover:bg-neutral-50 transition-colors"> <div class="flex-1"> <h4 class="font-medium text-neutral-800 line-clamp-2">Rust 使用sqlx连接mysql的时区问题</h4> <p class="text-sm text-neutral-500 mt-1">2025-04-26T11:09:16</p> </div> </a> </div> </div> <div class="mt-8 bg-white rounded-xl shadow-sm p-6" id="comment-section"> <h3 class="text-lg font-bold mb-4"><i class="fa fa-comments text-primary mr-2"></i>评论 <span id="comment-count" class="text-sm font-normal text-neutral-400"></span></h3> <div id="comment-list" class="space-y-6"></div> <div id="comment-pager" class="hidden items-center justify-center gap-3 mt-6 text-sm"></div> <div id="comment-form-wrap" class="mt-8 border-t pt-6"> <div id="replying-to" class="hidden mb-3 text-sm text-neutral-600 bg-neutral-50 border border-neutral-200 rounded px-3 py-2"> 回复 <span class="text-primary font-medium">@<span id="replying-name"></span></span> <button type="button" id="cancel-reply" class="ml-2 text-neutral-400 hover:text-primary"><i class="fa fa-times mr-1"></i>取消</button> </div> <div class="grid grid-cols-1 sm:grid-cols-3 gap-3 mb-3"> <input id="c-nick" type="text" maxlength="50" placeholder="昵称(选填,默认「访客」)" class="px-3 py-2 border border-neutral-200 rounded-lg text-sm focus:outline-none focus:border-primary"> <input id="c-email" type="email" maxlength="100" placeholder="邮箱(选填,仅用于头像)" class="px-3 py-2 border border-neutral-200 rounded-lg text-sm focus:outline-none focus:border-primary"> <input id="c-site" type="url" maxlength="200" placeholder="网址(选填)" class="px-3 py-2 border border-neutral-200 rounded-lg text-sm focus:outline-none focus:border-primary"> </div> <textarea id="c-content" rows="4" maxlength="1000" placeholder="说点什么吧…(先审后显,审核通过后展示)" class="w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm focus:outline-none focus:border-primary resize-y"></textarea> <div class="flex items-center justify-between mt-3"> <p class="text-xs text-neutral-400">评论先审后显;邮箱仅用于生成头像(MD5),不会公开显示</p> <button type="button" id="c-submit" class="px-5 py-2 bg-primary text-white rounded-lg text-sm hover:bg-blue-600 transition-colors disabled:opacity-50 disabled:cursor-not-allowed">提交评论</button> </div> </div> <div id="comment-toast" class="hidden fixed top-20 left-1/2 -translate-x-1/2 z-50 px-4 py-2 rounded-lg text-white text-sm shadow-lg"></div> </div> </article> <aside class="space-y-6"> <div class="bg-white rounded-xl shadow-sm p-6 sticky top-24"> <h3 class="text-lg font-bold mb-4"><i class="fa fa-list text-primary mr-2"></i>目录</h3> <nav class="toc-container text-sm"> <ul class="toc-list"><li><a class="toc-link" href="#%E8%AF%A6%E7%BB%86%E5%8A%9F%E8%83%BD%E6%B8%85%E5%8D%95">详细功能清单</a><ul class="toc-children"><li><a class="toc-link" href="#%E4%B8%80%E3%80%81-%E8%AF%A6%E7%BB%86%E5%8A%9F%E8%83%BD%E6%B8%85%E5%8D%95">一、 详细功能清单</a><ul class="toc-children"><li><a class="toc-link" href="#%E9%98%B6%E6%AE%B5%E4%B8%80%EF%BC%9A%E6%A0%B8%E5%BF%83-mvp-v010-%E5%9F%BA%E7%A1%80%E5%86%85%E5%AE%B9%E7%AE%A1%E7%90%86">阶段一:核心 MVP (v0.1.0) - 基础内容管理</a></li><li><a class="toc-link" href="#%E9%98%B6%E6%AE%B5%E4%BA%8C%EF%BC%9A%E5%9F%BA%E7%A1%80%E5%AE%8C%E5%96%84-v020-v050-%E5%A2%9E%E5%BC%BA%E5%86%85%E5%AE%B9%E4%B8%8E%E7%A4%BE%E5%8C%BA">阶段二:基础完善 (v0.2.0 - v0.5.0) - 增强内容与社区</a></li><li><a class="toc-link" href="#%E9%98%B6%E6%AE%B5%E4%B8%89%EF%BC%9A%E9%AB%98%E7%BA%A7%E7%89%B9%E6%80%A7-v100-%E5%8F%AF%E6%89%A9%E5%B1%95%E6%80%A7%E4%B8%8E%E7%8E%B0%E4%BB%A3%E5%8C%96">阶段三:高级特性 (v1.0.0+) - 可扩展性与现代化</a></li></ul></li><li><a class="toc-link" href="#%E4%BA%8C%E3%80%81-%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%8A%80%E6%9C%AF%E6%A0%88%E4%B8%8E%E6%89%A7%E8%A1%8C%E5%88%97%E8%A1%A8">二、 可执行技术栈与执行列表</a><ul class="toc-children"><li><a class="toc-link" href="#%E6%8A%80%E6%9C%AF%E6%A0%88%E9%80%89%E6%8B%A9">技术栈选择</a></li><li><a class="toc-link" href="#%E6%89%A7%E8%A1%8C%E5%88%97%E8%A1%A8%EF%BC%88%E4%BB%A5%E9%98%B6%E6%AE%B5%E4%B8%80%E4%B8%BA%E4%BE%8B%EF%BC%89">执行列表(以阶段一为例)</a></li></ul></li><li><a class="toc-link" href="#%E5%85%B3%E9%94%AE%E5%86%B3%E7%AD%96%E4%B8%8E%E5%BB%BA%E8%AE%AE">关键决策与建议</a></li></ul></li></ul> </nav> </div> <div class="bg-white rounded-xl shadow-sm p-6"> <h3 class="text-lg font-bold mb-4"><i class="fa fa-info-circle text-primary mr-2"></i>文章信息</h3> <ul class="space-y-3 text-sm"> <li class="flex justify-between"> <span class="text-neutral-500">作者</span> <span class="font-medium">寻龙剑侠</span> </li> <li class="flex justify-between"> <span class="text-neutral-500">发布时间</span> <span>2025-11-20 22:36:52</span> </li> <li class="flex justify-between"> <span class="text-neutral-500">更新时间</span> <span>2026-10-19 22:56:26</span> </li> <li class="flex justify-between"> <span class="text-neutral-500">阅读量</span> <span class="text-primary font-medium" data-role="read-count">71</span> </li> <li class="flex justify-between"> <span class="text-neutral-500">分类</span> <span>Rust</span> </li> <li class="flex justify-between"> <span class="text-neutral-500">类型</span> <span>原创</span> </li> </ul> </div> <div class="bg-white rounded-xl shadow-sm p-6"> <h3 class="text-lg font-bold mb-4"><i class="fa fa-fire text-secondary mr-2"></i>热门文章</h3> <ul class="space-y-3" data-role="hot-articles" data-variant="simple"> <li> <a href="/database/1792422371239.html" class="flex items-start gap-2 text-neutral-700 hover:text-primary transition-colors"> <span class="flex-shrink-0 w-5 h-5 rounded bg-primary text-white text-xs flex items-center justify-center">1</span> <span class="line-clamp-2">SQL server|with as使用方法和注意事项</span> </a> </li> <li> <a href="/database/1792422050834.html" class="flex items-start gap-2 text-neutral-700 hover:text-primary transition-colors"> <span class="flex-shrink-0 w-5 h-5 rounded bg-primary text-white text-xs flex items-center justify-center">2</span> <span class="line-clamp-2">clickhouse | 建表的时候可以做的一些优化</span> </a> </li> <li> <a href="/database/1792422034141.html" class="flex items-start gap-2 text-neutral-700 hover:text-primary transition-colors"> <span class="flex-shrink-0 w-5 h-5 rounded bg-primary text-white text-xs flex items-center justify-center">3</span> <span class="line-clamp-2">Clickhouse集群版本升级方案及降级方案(实操)</span> </a> </li> <li> <a href="/database/1792421710634.html" class="flex items-start gap-2 text-neutral-700 hover:text-primary transition-colors"> <span class="flex-shrink-0 w-5 h-5 rounded bg-primary text-white text-xs flex items-center justify-center">4</span> <span class="line-clamp-2">Clickhouse | clickhouse集群切换Clickhouse-keeper过程记录(一)</span> </a> </li> <li> <a href="/database/1792421971692.html" class="flex items-start gap-2 text-neutral-700 hover:text-primary transition-colors"> <span class="flex-shrink-0 w-5 h-5 rounded bg-primary text-white text-xs flex items-center justify-center">5</span> <span class="line-clamp-2">NIFI 实现上一次任务执行完后,等待5分钟执行下一次任务</span> </a> </li> </ul> </div> </aside> </div> </main> <footer class="bg-neutral-800 text-white mt-16"> <div class="container mx-auto px-4 sm:px-6 lg:px-8 py-12"> <div class="grid grid-cols-1 md:grid-cols-3 gap-8"> <div> <h3 class="text-xl font-bold mb-4">Dulucy</h3> <p class="text-neutral-300 mb-4">Rust博客实战 | 详细功能清单及开发计划(deepseek生成版)基于Rust开发个人博客,使用deepseek生成博客功能清单和开发计划</p> </div> </div> </div> <div class="border-t border-neutral-700 mt-8 pt-8 text-center text-neutral-400 text-sm"> <p> ©2025 <a href="https://www.dulucy.cn" class="hover:underline">Dulucy</a>. All Rights Reserved. Powered by <a href="https://www.dulucy.cn" class="hover:underline" target="_self">Dulucy</a>. </p> <div id="footer_icp"> <a href="https://beian.miit.gov.cn/" class="hover:underline" target="_blank">粤ICP备2023068367号</a> </div> </div> </footer> <button id="backToTop" class="fixed bottom-6 right-6 w-12 h-12 rounded-full bg-primary text-white shadow-lg flex items-center justify-center opacity-0 invisible transition-all z-50 hover:bg-primary/90"> <i class="fa fa-chevron-up"></i> </button> <script> const backToTopBtn = document.getElementById('backToTop'); window.addEventListener('scroll', () => { if (window.scrollY > 300) { backToTopBtn.classList.remove('opacity-0', 'invisible'); backToTopBtn.classList.add('opacity-100', 'visible'); } else { backToTopBtn.classList.remove('opacity-100', 'visible'); backToTopBtn.classList.add('opacity-0', 'invisible'); } const header = document.querySelector('header'); if (window.scrollY > 50) { header.classList.add('shadow'); } else { header.classList.remove('shadow'); } }); backToTopBtn.addEventListener('click', () => { window.scrollTo({ top: 0, behavior: 'smooth' }); }); document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); if (target) { target.scrollIntoView({ behavior: 'smooth' }); } }); }); </script> <script>window.ARTICLE_ID = 54;</script> <script src="/js/comments.js?v=1.0.0"></script> <script src="/js/like.js?v=1.1.0"></script> <script src="/js/article-stat.js?v=1.0.0"></script> <script src="/js/stat.js" defer></script></body> </html>