Gary's Personal Website
这是一个围绕「内容表达 + 多媒体展示 + 互动体验」打造的个人网站。当前代码实现已经覆盖博客系统、画廊、观影记录、Spotify 音乐页、后台管理和一套完整的内容交互能力。
站点功能总览
- 首页:展示个人形象与最近发布的随想内容。
- 随想系统:完整的内容发布、展示、搜索、互动与版本管理。
- 画廊系统:发布个人图片/作品,支持按创作日期与手动顺序混合排序。
- 电影页面:聚合豆瓣观影数据并做后端缓存,前端读取缓存展示。
- 音乐页面:对接 Spotify OAuth 与个人音乐数据。
- 联系与简历页面:访客可留言联系,站内展示个人 CV。
详细功能
1. 随想(Thoughts)
- 支持 HTML 与 Markdown 两种内容格式。
- 支持封面图、标签、分类、草稿/发布状态。
- 列表页支持分页、关键词搜索、按分类和标签筛选。
- 详情页支持按
slug访问、相关推荐和文章点赞。 - 评论支持嵌套回复,并接入自动审核(approve/pending/reject)+ 人工复核。
- 每次创建/编辑都会写入历史版本,支持查看、恢复和删除指定版本(保留至少一版)。
2. 评论与互动机制
- 点赞基于匿名用户标识实现「点一次赞 / 再点取消」。
- 评论提交后会经过离线规则审核,减少垃圾内容。
- 后台可对评论进行人工二次判定,自动记录审核来源与时间。
3. 画廊(Gallery)
- 前台仅展示
published状态内容。 - 每个条目支持标题、描述、标签、作品日期与手动排序。
- 排序规则为:先手动排序项,再按作品日期倒序。
4. 电影(Movies)
- 后端抓取豆瓣观影页并解析为结构化片单数据。
- 抓取结果持久化到 MongoDB 缓存,前端读取缓存避免频繁请求上游。
- 提供冷启动预热、定时刷新、跨进程锁租约与错误回填。
- 图片代理支持域名白名单、可选签名校验、请求限流与缓存头。
5. 音乐(Spotify)
- 支持 Spotify OAuth 登录与令牌持久化。
- 提供个人资料、歌单、歌单曲目分页、最近播放、Top Artists、Top Tracks。
- 支持单个艺术家详情聚合(基础信息 + 专辑 + 热门曲目)。
- 对 Spotify API 错误做统一归一化,并带有限重试与退避策略。
技术栈(按当前实现)
- 后端:Flask
- 数据库:MongoDB(PyMongo)
- 前端:Bootstrap、jQuery、Three.js
- 内容处理:Markdown 渲染、HTML 清洗、图片处理
- 外部能力:Spotify Web API、豆瓣页面抓取、邮件发送
评论 (0)
发表评论