一个基于 React Native + FastAPI 的面试经验分享平台,支持用户注册、登录、发布和搜索面试经验。
- 移动端: React Native 跨平台应用
- 后端: FastAPI + MySQL + Redis + Celery 分布式系统
- 认证: 手机号 + 短信验证码登录
- 实时: 异步任务处理和缓存
- 文档: 完整的 API 文档
Interview-express/
├── frontend/ # React Native 前端应用
│ ├── components/ # 可复用组件
│ ├── screens/ # 页面组件
│ ├── services/ # API 服务
│ ├── mock/ # Mock 数据(已移除)
│ └── ...
├── backend/ # FastAPI 后端系统
│ ├── app/
│ │ ├── api/ # API 路由
│ │ ├── core/ # 核心配置
│ │ ├── models/ # 数据模型
│ │ ├── schemas/ # Pydantic 模式
│ │ ├── services/ # 业务逻辑
│ │ └── tasks/ # Celery 任务
│ ├── alembic/ # 数据库迁移
│ └── ...
├── start_backend.sh # 后端启动脚本
└── README.md # 项目说明
- React Native 0.79.5
- React Navigation
- Expo
- React Native Paper
- React Native Vector Icons
- FastAPI 0.104.1
- SQLAlchemy 2.0.23
- MySQL 8.0
- Redis 7.0
- Celery 5.3.4
- Alembic (数据库迁移)
- JWT 认证
- Node.js 18+
- Python 3.11+
- MySQL 8.0+
- Redis 7.0+
git clone <repository-url>
cd Interview-express./start_backend.shcd backend
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# 或 venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 配置环境变量
cp env.example .env
# 编辑 .env 文件配置数据库连接
# 创建数据库
mysql -u root -p -e "CREATE DATABASE interview_express CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 运行数据库迁移
alembic upgrade head
# 启动服务
python run.pycd frontend
# 安装依赖
npm install
# 启动开发服务器
npx expo startcd backend
source venv/bin/activate
celery -A app.core.celery_app worker --loglevel=info- ✅ 手机号注册/登录
- ✅ 短信验证码验证
- ✅ JWT Token 认证
- ✅ 自动用户创建
- ✅ 发布面试经验
- ✅ 经验列表展示
- ✅ 经验详情查看
- ✅ 经验搜索功能
- ✅ 难度评分系统
- ✅ 异步短信发送
- ✅ Redis 缓存验证码
- ✅ 任务队列处理
- ✅ 数据库连接池
编辑 backend/.env 文件:
# 数据库配置
DATABASE_URL=mysql+pymysql://root:password@localhost:3306/interview_express
# Redis 配置
REDIS_URL=redis://localhost:6379/0
# JWT 配置
SECRET_KEY=your-secret-key-here
ACCESS_TOKEN_EXPIRE_MINUTES=30
# 服务器配置
HOST=0.0.0.0
PORT=8000
DEBUG=True编辑 frontend/services/api.js 文件中的 API 地址:
const API_BASE_URL = 'http://localhost:8000/api/v1';启动后端服务后,访问以下地址查看 API 文档:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
POST /api/v1/auth/send-code- 发送短信验证码POST /api/v1/auth/login- 用户登录GET /api/v1/auth/test-code/{phone}- 获取测试验证码
GET /api/v1/experiences- 获取经验列表GET /api/v1/experiences/{id}- 获取单个经验POST /api/v1/experiences- 创建经验PUT /api/v1/experiences/{id}- 更新经验DELETE /api/v1/experiences/{id}- 删除经验GET /api/v1/experiences/search/- 搜索经验
cd backend
source venv/bin/activate
pytestcd frontend
npm testcd backend
docker-compose up -d# 构建后端镜像
cd backend
docker build -t interview-express-backend .
# 运行容器
docker run -p 8000:8000 interview-express-backendphone(主键) - 手机号username- 用户名avatar- 头像bio- 个人简介is_active- 是否激活created_at- 创建时间updated_at- 更新时间
id(主键) - 经验IDcompany- 公司名称position- 职位summary- 经验总结content- 详细内容difficulty- 难度评分tags- 标签(JSON格式)user_phone(外键) - 用户手机号created_at- 创建时间updated_at- 更新时间
- JWT Token 认证
- 密码哈希存储
- 短信验证码验证
- CORS 配置
- 输入验证和清理
- Redis 缓存验证码
- 数据库连接池
- 异步任务处理
- 分页查询
- 防抖搜索
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
如有问题或建议,请通过以下方式联系:
- 提交 Issue
- 发送邮件
- 微信联系
注意: 这是一个演示项目,生产环境部署前请务必:
- 修改默认密码和密钥
- 配置真实的短信服务
- 设置适当的 CORS 策略
- 配置 HTTPS
- 设置日志记录
- 配置监控和告警