一个功能完整的社交分享平台,灵感来源于小红书,支持用户发布图文笔记、互动交流、关注粉丝等核心社交功能。
本项目是一个前后端分离的现代化社交分享平台,采用 Vue 3 + FastAPI 技术栈构建。用户可以发布图文笔记、浏览内容、点赞收藏、评论互动、关注用户、私信聊天等,提供了完整的社交网络体验。
- 用户注册/登录:支持用户名密码注册登录,密码使用 bcrypt 加密存储
- 个人资料管理:支持修改昵称、上传头像
- 用户主页:查看用户发布的笔记、点赞的笔记、收藏的笔记
- 关注系统:关注/取消关注用户,查看关注列表和粉丝列表
- 发布笔记:支持标题、正文、图片上传
- 视频发布:支持视频笔记发布,可上传视频文件(MP4、MOV、WebM格式)和视频封面
- 分类管理:笔记支持多种分类(推荐、穿搭、美食、彩妆、影视、职场、情感、家居、游戏、旅行、健身等)
- 隐私设置:支持公开/私密笔记设置
- 内容管理:用户可以删除自己发布的笔记
- 瀑布流布局:美观的卡片式瀑布流展示
- 分类筛选:按分类浏览不同内容
- 搜索功能:支持标题和内容搜索
- 详情页:查看笔记完整内容、作者信息、互动数据
- 点赞系统:对笔记和评论进行点赞/取消点赞
- 收藏功能:收藏喜欢的笔记,方便后续查看
- 评论系统:对笔记发表评论,支持评论点赞
- 实时统计:实时显示点赞数、评论数等数据
- 私信系统:用户之间可以发送私信
- 会话列表:查看所有对话列表
- 消息已读:支持消息已读状态标记
- 未读提醒:显示未读消息数量
- 互动通知:点赞、评论等互动通知
- 关注通知:新粉丝关注通知
- 通知管理:查看和管理所有通知
- 框架:FastAPI - 现代化的 Python Web 框架,高性能异步支持
- 数据库:MySQL - 关系型数据库,存储用户、笔记、互动等数据
- ORM:PyMySQL - Python MySQL 数据库连接库
- 认证:bcrypt - 密码加密存储
- 文件处理:Pillow - 图片处理
- 环境管理:python-dotenv - 环境变量管理
- 服务器:Uvicorn - ASGI 服务器
- 框架:Vue 3 - 渐进式 JavaScript 框架
- 构建工具:Vite - 下一代前端构建工具
- 路由:Vue Router 4 - 官方路由管理器
- 状态管理:Pinia - Vue 官方状态管理库
- UI 组件库:Element Plus - 基于 Vue 3 的组件库
- CSS 框架:Tailwind CSS - 实用优先的 CSS 框架
- HTTP 客户端:Axios - 基于 Promise 的 HTTP 库
- 工具库:
- moment.js - 日期时间处理
- html2canvas - 图片生成
- Python 版本:Python 3.12+
- Node.js 版本:Node.js 16+
- 数据库:MySQL 5.7+ / MySQL 8.0+
xiaohongshu/
├── backend/ # 后端服务模块
│ ├── __init__.py
│ ├── auth_service.py # 用户认证服务
│ ├── database.py # 数据库连接管理
│ ├── message_service.py # 消息服务
│ ├── post_service.py # 笔记服务
│ ├── user_service.py # 用户服务
│ └── utils.py # 工具函数
├── frontend/ # 前端项目
│ ├── public/ # 静态资源
│ ├── src/
│ │ ├── api/ # API 接口封装
│ │ │ └── index.js
│ │ ├── assets/ # 资源文件
│ │ ├── components/ # Vue 组件
│ │ │ ├── NavBar.vue
│ │ │ └── WaterfallCard.vue
│ │ ├── router/ # 路由配置
│ │ │ └── index.js
│ │ ├── stores/ # Pinia 状态管理
│ │ │ ├── transition.js
│ │ │ └── user.js
│ │ ├── views/ # 页面视图
│ │ │ ├── ChatView.vue
│ │ │ ├── HomeView.vue
│ │ │ ├── LoginView.vue
│ │ │ ├── MessageIndexView.vue
│ │ │ ├── PostDetailView.vue
│ │ │ ├── ProfileView.vue
│ │ │ └── PublishView.vue
│ │ ├── App.vue # 根组件
│ │ └── main.js # 入口文件
│ ├── index.html
│ ├── package.json
│ ├── vite.config.js # Vite 配置
│ └── tailwind.config.js # Tailwind 配置
├── assets/ # 上传的图片资源
├── venv/ # Python 虚拟环境
├── server.py # FastAPI 服务器主文件
├── init_db.py # 数据库初始化脚本
├── schema.sql # 数据库表结构
├── requirements.txt # Python 依赖
├── package.json # 根目录 package.json
├── 一键运行后端.bat # Windows 快速启动脚本
└── README.md # 项目说明文档
-
users - 用户表
- 存储用户基本信息(用户名、密码哈希、昵称、头像等)
-
posts - 笔记表
- 存储笔记内容(标题、正文、图片、分类、点赞数、隐私设置等)
-
comments - 评论表
- 存储评论内容(笔记ID、用户ID、内容、点赞数等)
-
likes - 点赞表
- 记录用户对笔记的点赞关系(防止重复点赞)
-
collections - 收藏表
- 记录用户收藏的笔记
-
follows - 关注表
- 记录用户之间的关注关系
-
messages - 私信表
- 存储用户之间的私信内容
-
notifications - 通知表
- 存储系统通知(点赞、评论、关注等)
-
comment_likes - 评论点赞表
- 记录用户对评论的点赞关系
- Python 3.12+
- Node.js 16+
- MySQL 5.7+ / MySQL 8.0+
git clone <repository-url>
cd mini-rednoteCREATE DATABASE mini_redbook CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;在项目根目录创建 .env 文件:
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=mini_redbook
DB_PORT=3306python init_db.py或者直接执行 SQL 文件:
mysql -u root -p mini_redbook < schema.sql# 创建虚拟环境(推荐)
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt方式一:使用批处理文件(Windows)
一键运行后端.bat方式二:手动启动
# 激活虚拟环境后
uvicorn server:app --host 0.0.0.0 --port 8000 --reload后端服务将在 http://localhost:8000 启动
cd frontend
npm installnpm run dev前端服务将在 http://localhost:5173 启动
打开浏览器访问:http://localhost:5173
POST /api/login- 用户登录POST /api/register- 用户注册PUT /api/user/profile- 更新用户资料
GET /api/posts- 获取笔记列表(支持分页、搜索、分类筛选)GET /api/posts/{post_id}- 获取笔记详情POST /api/posts- 创建笔记DELETE /api/posts/{post_id}- 删除笔记PUT /api/posts/{post_id}/visibility- 更新笔记可见性GET /api/posts/user/{user_id}- 获取用户发布的笔记GET /api/posts/user/{user_id}/liked- 获取用户点赞的笔记GET /api/posts/user/{user_id}/collected- 获取用户收藏的笔记
POST /api/posts/{post_id}/like- 点赞/取消点赞笔记POST /api/posts/{post_id}/collect- 收藏/取消收藏笔记GET /api/posts/{post_id}/comments- 获取评论列表POST /api/posts/{post_id}/comments- 添加评论POST /api/comments/{comment_id}/like- 点赞/取消点赞评论
GET /api/users/{user_id}- 获取用户公开信息POST /api/users/{user_id}/follow- 关注用户POST /api/users/{user_id}/unfollow- 取消关注GET /api/users/{user_id}/is_following- 检查是否关注GET /api/users/{user_id}/followers- 获取粉丝列表GET /api/users/{user_id}/following- 获取关注列表GET /api/users/{user_id}/counts- 获取关注/粉丝数量
POST /api/messages- 发送私信GET /api/messages/conversations- 获取会话列表GET /api/messages/conversation/{other_user_id}- 获取对话消息PUT /api/messages/read- 标记消息已读GET /api/messages/unread/count- 获取未读消息数
GET /api/notifications- 获取通知列表PUT /api/notifications/read- 标记通知已读
GET /assets/{filename}- 获取上传的图片
前端采用响应式瀑布流布局,自动适配不同屏幕尺寸,提供流畅的浏览体验。
- 支持 JPG、PNG、JPEG 格式
- 图片自动保存到
assets/目录 - 使用 UUID 生成唯一文件名,避免冲突
- 支持 MP4、MOV、WebM 格式
- 视频文件大小限制:前端限制 500MB,后端支持最大 10GB
- 视频笔记必须同时上传视频文件和封面图片
- 视频文件自动保存到
assets/目录 - 使用 UUID 生成唯一文件名,避免冲突
- 使用 bcrypt 进行密码哈希加密
- 后端使用 Pydantic 进行数据模型验证
- 前端使用 Element Plus 表单验证
后端已配置 CORS 中间件,支持跨域请求,方便前后端分离开发。
- 统一的错误响应格式
- 详细的错误信息返回
- 前端友好的错误提示
本项目针对移动端设备进行了全面的 UI 适配优化,确保在手机、平板等移动设备上提供良好的用户体验。
- 在
index.html中配置了标准的 viewport meta 标签,确保页面在移动设备上正确缩放 - 设置
width=device-width, initial-scale=1.0实现自适应布局
- 瀑布流列数自适应:根据屏幕宽度自动调整瀑布流列数
- 移动端(< 768px):2 列布局
- 平板端(768px - 1024px):3 列布局
- 桌面端(1024px - 1280px):4 列布局
- 大屏桌面(≥ 1280px):5 列布局
- 导航栏响应式:桌面端显示完整导航栏,移动端显示简化版导航栏
- 搜索框适配:移动端和桌面端采用不同的搜索框布局和交互方式
- 底部导航栏(MobileTabBar):仅在移动端显示(
md:hidden),提供首页、分区、发布、消息、我的等核心功能入口 - 安全区域适配:使用
env(safe-area-inset-bottom)CSS 变量适配 iPhone 等设备的底部安全区域,避免内容被系统 UI 遮挡
- 使用 Tailwind CSS 的响应式工具类(如
md:,lg:,xl:等前缀)实现断点式响应式设计 - 移动端优先的设计理念,通过媒体查询逐步增强桌面端体验
- 统一的间距、字体大小等设计规范,确保跨设备的一致性
- 按钮和可点击元素具有合适的触摸目标尺寸(最小 44x44px)
- 优化了移动端的滚动体验和手势交互
- 适配移动端浏览器的默认行为(如阻止双击缩放等)
- 服务层架构:采用服务层模式,将业务逻辑封装在
backend/目录下的各个服务文件中 - 数据库连接:使用单例模式管理数据库连接,确保连接复用
- 文件上传:使用 FastAPI 的
UploadFile处理文件上传 - API 设计:遵循 RESTful 设计规范
- 组件化开发:使用 Vue 3 Composition API 进行组件开发
- 状态管理:使用 Pinia 管理全局状态(用户信息、过渡动画等)
- 路由守卫:使用 Vue Router 的导航守卫实现权限控制
- 响应式设计:使用 Tailwind CSS 实现响应式布局
- Python:遵循 PEP 8 代码规范
- JavaScript:使用 ESLint 进行代码检查(可配置)
- 注释:关键函数和类需要添加文档字符串
- 添加图片压缩功能,优化存储空间
- 实现图片懒加载,提升页面性能
- 实现推荐算法,个性化内容推荐
- 添加标签系统,支持多标签分类
- 添加消息推送功能(WebSocket)
- 实现内容审核功能
- 添加数据统计和分析功能
- 支持多语言国际化
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
- 项目创建者:chyinan
- FastAPI - 现代化的 Python Web 框架
- Vue.js - 渐进式 JavaScript 框架
- Element Plus - Vue 3 组件库
- Tailwind CSS - 实用优先的 CSS 框架
注意:本项目仅用于学习和研究目的,请勿用于商业用途。