浪吞飞鸟千帆动,风渡游云一径横。风渡论坛是一个海外学生论坛,提供读书会、课程内容分享、资源互换、交友等服务。
本项目是基于React + FastAPI开发的学生论坛系统,目前提供帖子发布、评论、用户管理等功能。
身份和管理板块
- 注册、登录和验证机制
- 等级机制
论坛板块
- 等级机制发帖、回复功能
身份和管理板块
- 密码更改机制
- 昵称、头像和简介设置
- 邮箱和authenticator机制
- 用户评分机制(每个用户可以对其他用户进行星级打分,对方被打分情况可以作为对方声誉的体现,会在对方用户名颜色上显示)
- 管理员用户机制
论坛版块
- 论坛各大板块
- 查看个人帖子
- 删帖和隐藏功能
- 图片和视频发送
小组版块
- 全部功能
组局板块
- 全部功能
- React
- Material-UI
- React Router
- Axios
- Python FastAPI
- SQLAlchemy
- PostgreSQL
- JWT认证
- 进入frontend目录
- 安装依赖:
- 启动开发服务器:
npm start
- 进入backend目录
- 创建虚拟环境:
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
- 安装依赖:
pip install -r requirements.txt
- 启动服务器:
uvicorn main:app --reload
- Node.js >= 14.0.0
- Python >= 3.8
- PostgreSQL >= 12.0
- npm >= 6.14.0
- 创建PostgreSQL数据库
- 修改后端配置文件
.env:
DATABASE_URL=postgresql://username:password@localhost/student_forum
JWT_SECRET=your_jwt_secret
创建 .env 文件:
**REACT_APP_API_URL=**http://localhost:8000
- main: 生产环境分支
- develop: 开发环境分支
- feature/*: 新功能分支
- bugfix/*: 修复分支
# 新功能
git commit -m "feat: 添加用户头像上传功能"
# 修复bug
git commit -m "fix: 修复评论不能换行的问题"
# 文档更新
git commit -m "docs: 更新API文档"
- 使用ESLint + Prettier
- 组件采用函数式编程
- 状态管理使用React Hooks
- 异步请求统一处理
示例:
// 组件编写规范
const PostList = ()** => **{
** const [posts, setPosts] = useState([]);**
** const [loading, setLoading] = useState(false)**;
** useEffect(()** => {
** fetchPosts();**
** }, []);**
** **// 异步请求处理
** const fetchPosts = async ()** => {
** try **{
** setLoading(true)**;
** const response = await axios.get('/api/posts')**;
** setPosts(response.data)**;
** } catch (error) **{
** console.error(error)**;
** } finally **{
** setLoading(false)**;
** **}
** };**
}
- 遵循PEP8规范
- 使用类型注解
- 编写单元测试
- 异常统一处理
示例:
from typing import List
from fastapi import HTTPException
async def get_posts(skip: int = 0, limit: int = 10)** -> List**[Post]:
** try:**
** posts = await db.posts.find().skip(skip)**.limit(limit)
** return posts**
** except Exception as e:**
** raise HTTPException(status_code=500, detail=str**(e))
├── frontend/ # 前端目录
│ ├── src/ # 源代码
│ │ ├── pages/ # 页面组件
│ │ ├── components/ # 通用组件
│ │ └── utils/ # 工具函数
│ └── public/ # 静态资源
├── backend/ # 后端目录
│ ├── models/ # 数据模型
│ ├── routers/ # 路由处理
│ ├── schemas/ # 数据验证
│ └── utils/ # 工具函数
- POST /api/users/register - 用户注册
- POST /api/users/login - 用户登录
- GET /api/users/profile - 获取个人资料
- GET /api/posts - 获取帖子列表
- POST /api/posts/create - 创建新帖
- GET /api/posts/{id} - 获取帖子详情
- POST /api/posts/{id}/like - 点赞
- GET /api/posts/search - 搜索帖子
- GET /api/posts/{id}/comments - 获取评论列表
- POST /api/posts/{id}/comments - 发表评论
- id: int (主键)
- username: varchar
- email: varchar
- password: varchar
- experience: int
- level: int
- id: int (主键)
- title: varchar
- content: text
- author_id: int (外键)
- created_at: timestamp
- likes_count: int
- id: int (主键)
- content: text
- post_id: int (外键)
- user_id: int (外键)
- parent_id: int (外键)
- created_at: timestamp
- 注册/登录
- JWT认证
- 个人资料
- 等级经验系统
- 发布/编辑帖子
- 帖子列表/详情
- 搜索功能
- 点赞功能
- 发表评论
- 多级回复
- @用户功能
- 构建生产版本:
npm run build
- 将build目录下的文件部署到Web服务器
- 安装生产环境依赖
- 配置环境变量
- 使用gunicorn启动:
gunicorn main:app
MIT License
# 创建数据库
createdb student_forum
# 执行数据库迁移
cd backend
alembic upgrade head
# 终端1: 启动后端
cd backend
source venv/bin/activate # 或 venv\Scripts\activate
uvicorn main:app --reload
# 终端2: 启动前端
cd frontend
npm start
浏览器访问 http://localhost:3000
# 后端测试
cd backend
pytest
# 前端测试
cd frontend
npm test
cd frontend
npm run cypress:open
身份和管理板块:
-
注册、登录和验证机制
- /backend/routers/users.py
- /backend/models/user.py
- /frontend/src/pages/Login.js
- /frontend/src/pages/Register.js
- /frontend/src/utils/auth.js
-
等级机制
- /backend/models/user.py (experience和level字段)
- /backend/utils/experience.py
- /frontend/src/pages/Profile.js
论坛板块:
- 发帖、回复功能
- /backend/routers/posts.py
- /backend/models/post.py
- /backend/models/comment.py
- /frontend/src/pages/ForumPage.js
- /frontend/src/pages/PostDetail.js
身份和管理板块:
-
密码更改机制
- 修改: /backend/routers/users.py
- 新增: /frontend/src/pages/ChangePassword.js
- 修改: /frontend/src/utils/auth.js
-
昵称、头像和简介设置
- 修改: /backend/models/user.py (添加新字段)
- 修改: /backend/routers/users.py (添加头像上传接口)
- 新增: /frontend/src/pages/ProfileEdit.js
- 新增: /frontend/src/components/AvatarUpload.js
-
邮箱和authenticator机制
- 新增: /backend/utils/email.py
- 新增: /backend/utils/authenticator.py
- 修改: /backend/models/user.py
- 新增: /frontend/src/pages/Security.js
- 修改: /frontend/src/utils/auth.js
-
用户评分机制
- 新增: /backend/models/rating.py
- 新增: /backend/routers/ratings.py
- 新增: /frontend/src/components/UserRating.js
- 修改: /frontend/src/pages/Profile.js
-
管理员用户机制
- 修改: /backend/models/user.py (添加role字段)
- 新增: /backend/utils/permissions.py
- 新增: /frontend/src/pages/Admin/
- 新增: /frontend/src/utils/permissions.js
- ......
论坛板块:
-
论坛各大板块
- 新增: /backend/models/category.py
- 修改: /backend/models/post.py
- 新增: /frontend/src/pages/Category/
- 修改: /frontend/src/pages/ForumPage.js
-
查看个人帖子
- 修改: /backend/routers/posts.py
- 新增: /frontend/src/pages/MyPosts.js
-
删帖和隐藏功能
- 修改: /backend/models/post.py
- 修改: /backend/routers/posts.py
- 修改: /frontend/src/pages/PostDetail.js
-
图片和视频发送
- 新增: /backend/utils/upload.py
- 修改: /backend/models/post.py
- 新增: /frontend/src/components/MediaUpload.js
- 修改: /frontend/src/pages/PostDetail.js
小组版块:
- 新增: /backend/models/group.py
- 新增: /backend/routers/groups.py
- ......
组局板块:
- 新增: /backend/models/activity.py
- 新增: /backend/routers/activities.py
- ......