This repository has been archived on 2026-10-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
NeteaseUrl/web/routers/index.py
T
snowy-yang 8803444755 feat: 后端接线上 React 构建产物,legacy 模板降级为兜底
为什么:前端迁移到 Vite 后,首页应直接返回 frontend/dist/index.html
字节(golden 口径随之变为构建产物原样字节),仅当 dist 未构建时
回退 Jinja2 渲染的 legacy 模板。同步挂载 /assets 静态目录、排除
frontend 的 node_modules/tsbuildinfo 入库、docker 构建只带 dist
不带源码、ruff/pyright 排除 frontend 目录(TS 侧由 tsc+vite 把关)。
2026-09-27 18:35:04 +08:00

40 lines
1.3 KiB
Python
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.
# -*- coding: utf-8 -*-
"""首页与静态资源。
- GET / 首页:优先服务 React 构建产物 frontend/dist/index.html;
dist 未构建时回退旧版 templates/index.html(平滑过渡)
- 静态资源由 Starlette StaticFiles 挂载 /assets 与 /static(见 web/app.py)
"""
from pathlib import Path
from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse
router = APIRouter()
_PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
_DIST_INDEX = _PROJECT_ROOT / 'frontend' / 'dist' / 'index.html'
_LEGACY_TEMPLATE = _PROJECT_ROOT / 'templates' / 'index.html'
def _render_index() -> str:
"""渲染首页 HTML:React 构建产物优先,缺失时回退旧模板。"""
if _DIST_INDEX.is_file():
return _DIST_INDEX.read_text(encoding='utf-8')
import jinja2
env = jinja2.Environment(
loader=jinja2.FileSystemLoader(str(_LEGACY_TEMPLATE.parent)),
autoescape=True,
)
return env.get_template(_LEGACY_TEMPLATE.name).render()
@router.get('/', response_class=HTMLResponse)
async def index(request: Request) -> HTMLResponse:
"""首页(禁止缓存,确保前端更新即时生效)。"""
return HTMLResponse(
content=_render_index(),
headers={'Cache-Control': 'no-cache, no-store, must-revalidate'},
)