Files
AcgStyleBlog/readme.md
2026-03-31 22:41:08 +08:00

190 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ACG Blog - 二次元风格博客系统
<p align="center">
<img src="https://img.shields.io/badge/Python-3.11+-blue.svg" alt="Python">
<img src="https://img.shields.io/badge/FastAPI-0.110-green.svg" alt="FastAPI">
<img src="https://img.shields.io/badge/Vue-3.5-brightgreen.svg" alt="Vue">
<img src="https://img.shields.io/badge/TypeScript-5.9-blue.svg" alt="TypeScript">
<img src="https://img.shields.io/badge/Docker-Ready-blue.svg" alt="Docker">
</p>
基于 **FastAPI****Vue 3** 的前后端分离博客系统,主打二次元视觉体验与高性能响应。支持 Markdown 文章发布、访问量统计、分类标签管理、深色模式切换等功能。
## 技术栈
### 后端
| 技术 | 说明 |
|------|------|
| FastAPI | 高性能异步 Web 框架 |
| Tortoise-ORM | 异步 ORM支持 PostgreSQL |
| PostgreSQL | 关系型数据库 |
| Redis | 缓存与会话存储 |
| JWT | 无状态身份认证 |
| Pydantic | 数据验证 |
| Loguru | 日志处理 |
### 前端
| 技术 | 说明 |
|------|------|
| Vue 3 | 组合式 API (Script Setup) |
| Vite | 快速构建工具 |
| TypeScript | 类型安全 |
| Pinia | 状态管理 |
| Naive UI | UI 组件库 |
| Tailwind CSS | 样式引擎 |
| Axios | HTTP 客户端 |
## 项目结构
```
├── backend/ # FastAPI 后端
│ ├── app/
│ │ ├── api/endpoints/ # API 端点 (auth, posts, comments, users)
│ │ ├── core/ # 核心配置 (config, security, database, logger)
│ │ ├── crud/ # 数据库增删改查
│ │ ├── models/ # Tortoise-ORM 数据模型
│ │ ├── schemas/ # Pydantic 数据验证模型
│ │ └── main.py # 应用入口
│ ├── Dockerfile # 后端容器配置
│ ├── schema.sql # 数据库建表脚本
│ └── requirements.txt # Python 依赖
├── frontend/ # Vue 3 前端
│ ├── src/
│ │ ├── api/ # Axios 接口封装
│ │ ├── components/ # 公共组件
│ │ ├── views/ # 页面视图
│ │ ├── store/ # Pinia 状态管理
│ │ ├── router/ # 路由配置
│ │ └── types/ # TypeScript 类型定义
│ ├── Dockerfile # 前端容器配置
│ └── nginx.conf # Nginx 配置
├── docker-compose.yml # Docker 编排
├── schema.sql # 数据库建表脚本
└── docker-deploy.md # 部署文档
```
## 快速开始
### 环境要求
- Python 3.11+
- Node.js 18+
- PostgreSQL 14+
- Redis 7+ (可选)
### 本地开发
**1. 克隆项目**
```bash
git clone <repository-url>
cd acg-blog
```
**2. 启动后端**
```bash
cd backend
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或 venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 配置环境变量
cp .env.example .env # 修改数据库连接信息
# 初始化数据库 (确保 PostgreSQL 运行中)
psql -U postgres -c "CREATE DATABASE acg_blog;"
psql -U postgres -d acg_blog -f schema.sql
# 启动服务
uvicorn main:app --reload --port 8000
```
**3. 启动前端**
```bash
cd frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev
```
**4. 访问应用**
- 前端: http://localhost:5173
- 后端 API: http://localhost:8000
- API 文档: http://localhost:8000/docs
### Docker 部署
```bash
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
```
访问 http://localhost 即可使用。
## API 接口
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /api/v1/auth/register | 用户注册 |
| POST | /api/v1/auth/login | 用户登录 |
| POST | /api/v1/auth/refresh | 刷新 Token |
| GET | /api/v1/auth/me | 获取当前用户 |
| GET | /api/v1/posts | 获取文章列表 |
| GET | /api/v1/posts/{id} | 获取文章详情 |
| POST | /api/v1/posts | 创建文章 |
| PUT | /api/v1/posts/{id} | 更新文章 |
| DELETE | /api/v1/posts/{id} | 删除文章 |
| GET | /api/v1/categories | 获取分类列表 |
| GET | /api/v1/tags | 获取标签列表 |
| GET | /api/v1/comments/post/{id} | 获取文章评论 |
## 默认账户
- 用户名: `admin`
- 邮箱: `admin@acgblog.com`
- 密码: `admin123`
**请在部署后立即修改管理员密码!**
## 功能特性
- [x] 用户认证 (JWT)
- [x] 文章管理 (CRUD)
- [x] 分类与标签
- [x] Markdown 编辑器
- [x] 评论系统
- [x] 浏览量统计
- [x] 深色/浅色模式
- [x] 响应式设计
- [x] Docker 部署
## 开发说明
### 前端组件
- `Navbar.vue` - 顶部导航栏
- `Hero.vue` - 首页横幅
- `PostCard.vue` - 文章卡片
- `Sidebar.vue` - 侧边栏
- `Footer.vue` - 页脚
### 管理后台
- `/admin/dashboard` - 仪表盘
- `/admin/posts` - 文章管理
- `/admin/categories` - 分类管理
- `/admin/tags` - 标签管理
## License
MIT License