4.2 KiB
4.2 KiB
continuation.md
当前项目状态
djapi — Django 5.2 金融数据 API 项目,2026-06-17 已部署。
服务器:simon@doorcome.cn,路径 /home/simon/myquant/djapi/,虚拟环境 /opt/miniconda/envs/django/。
已完成
1. 安全:密钥统一管理
- 所有密钥 → 环境变量,
.env统一管理 djapi/env_loader.py(Django 端)+api/video/env.py(video 端)双加载器- 共享
MySQLDB→api/utils/mysql_handler.py .env.example、.gitignore
2. 代码质量
api/views.py:227 → ~130 行,消除重复api/stock/stock_utils.py:viewFunc_singleParam()包装器api/stock/config.py:拆分为 config / strategy_config / scan_config
3. drf-spectacular 集成
- 14 端点
@api_view+@extend_schema,8 tag 分组 - 13 Serializer,Swagger
/api/docs/
4. 股息率 API 优化
- 删除
api/stock/getDivData_AK.py(akshare 版),/api/getdivak/路由移除 - 优化
api/stock/getStockDiv2.py:- TTM 计算:
calculate_ttm_div行级循环 O(n²) →rolling('360D').sum()O(n) - 删除向前填充逻辑(~30 行),避免与毛刺平滑冲突
- TTM 计算:
- 修复
api/stock/smoothBrush.py:if/elif 分支中 prev_valid/next_valid 赋值反了
5. video 模块重构与 Bug 修复
- 新增
api/video/env.py— .env 加载 newsRedo.py重写 — 三分支智能重处理- P0 修复:
getVideo5.py日期校验 bug(start_date > start_date→start_date > end_date) - P1 清理:删除
ai.py(两个函数均为死代码),清理newsProcess.py冗余 import - P2 修复:
audioRead.py—transcribe_audio异常时返回['', '']统一类型;analyze_and_correct_text防御 None - P3 修复:
newsProcess.py—news_to_db()JSON 解析自适应 dict/list(DeepSeek json_object 模式返回 dict 包装)
6. 文档与测试
CLAUDE.md、README.md、continuation.md- 18 个单元测试
video 目录文件现状(10 个 .py)
| 文件 | 职责 |
|---|---|
env.py |
.env 加载 |
getVideo5.py |
主流程:抓取→下载→ASR→入库 |
audioRead.py |
音频转换、分割、ASR 识别、文本纠错 |
deepseek.py |
DeepSeek API 封装(类 + deepseek_text 函数,支持 response_format) |
newsProcess.py |
AI 新闻分割+标题提取,JSON 自适应解析 |
newsRedo.py |
手动重处理(三分支) |
main.py |
定时任务入口(当天) |
main_videos.py |
批量补缺(扫描缺失日期) |
mysqlHandle.py |
MySQLDB 重新导出 |
所有 API 端点(14 个)
| 端点 | 数据源 | 说明 |
|---|---|---|
stockbasic/ |
Tushare | 日线行情 |
stockinfo/ |
Tushare | 个股基本信息 |
industrys/ |
Tushare | 行业股票列表 |
stockparam/ |
Tushare | 个股参数 |
stockep/ |
Tushare | TTM EPS |
quarterlyEps/ |
Tushare | 季度 EPS |
indexByName/ |
Tushare | 指数查询 |
indexDatas/ |
Tushare | 指数行情 |
dailymargin/ |
Tushare | 每日融资融券汇总 |
stockmargin/ |
Tushare | 个股融资融券 |
finance/ |
Tushare | 财务报表分析 |
getdiv/ |
Tushare | 股息率(TTM rolling + 毛刺平滑) |
xwlbNews/ |
MySQL | 新闻联播原始文本 |
xwlbFine/ |
MySQL | 新闻联播 AI 精编 |
部署
# 全量同步
rsync -avz --delete \
--exclude='.env' --exclude='db.sqlite3' \
--exclude='*.log' --exclude='uwsgi.pid' \
--exclude='__pycache__/' --exclude='*.pyc' \
--exclude='xwlb_video/' --exclude='audio_processing/' \
/Users/summer/Downloads/cc-cursor/djapi/ \
simon@doorcome.cn:/home/simon/myquant/djapi/
# 单文件同步必须写完整路径
# 正确:rsync api/views.py simon@...:/.../djapi/api/views.py
# 重启
ssh simon@doorcome.cn "kill \$(lsof -ti:5004); sleep 2; /opt/miniconda/envs/django/bin/uwsgi --ini /home/simon/myquant/djapi/uwsgi.ini"
关键设计决策
- video 模块保护、向后兼容优先、不使用 python-dotenv
- rsync 陷阱:多文件源会展平路径
.env双加载:Django 端djapi/env_loader.py+ video 端api/video/env.py- 股息率 TTM 用
rolling('360D').sum()向量化,不手动循环 - DeepSeek json_object 模式返回 dict,newsProcess 自适应提取 list