main.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. """
  2. 表格线编辑器后端服务
  3. FastAPI 应用入口
  4. """
  5. import sys
  6. from pathlib import Path
  7. # 添加 ocr_platform 根目录到 Python 路径(必须在导入其他模块之前)
  8. _file_path = Path(__file__).resolve()
  9. ocr_platform_root = _file_path.parents[2] # main.py -> backend -> table_line_generator -> ocr_platform
  10. if str(ocr_platform_root) not in sys.path:
  11. sys.path.insert(0, str(ocr_platform_root))
  12. from fastapi import FastAPI
  13. from fastapi.middleware.cors import CORSMiddleware
  14. from loguru import logger
  15. # 配置日志
  16. logger.remove()
  17. logger.add(
  18. sys.stdout,
  19. level="INFO",
  20. format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
  21. )
  22. # 创建应用
  23. app = FastAPI(
  24. title="表格线编辑器 API",
  25. description="无线表格智能标注工具后端服务",
  26. version="0.1.0",
  27. docs_url="/docs",
  28. redoc_url="/redoc"
  29. )
  30. # CORS 配置
  31. app.add_middleware(
  32. CORSMiddleware,
  33. allow_origins=[
  34. "http://localhost:5173", # Vite 开发服务器
  35. "http://localhost:3000", # 备用端口
  36. "http://127.0.0.1:5173",
  37. "http://127.0.0.1:3000",
  38. ],
  39. allow_credentials=True,
  40. allow_methods=["*"],
  41. allow_headers=["*"],
  42. )
  43. # 注册路由
  44. from api.editor import router as editor_router
  45. from api.template import router as template_router
  46. from api.directory import router as directory_router
  47. from api.config import router as config_router
  48. from api.batch import router as batch_router
  49. app.include_router(editor_router)
  50. app.include_router(template_router)
  51. app.include_router(directory_router)
  52. app.include_router(config_router)
  53. app.include_router(batch_router)
  54. @app.get("/")
  55. async def root():
  56. """根路径"""
  57. return {
  58. "service": "table-line-editor",
  59. "version": "0.1.0",
  60. "docs": "/docs"
  61. }
  62. @app.on_event("startup")
  63. async def startup_event():
  64. logger.info("🚀 表格线编辑器后端服务启动")
  65. logger.info("📚 API 文档: http://localhost:8000/docs")
  66. @app.on_event("shutdown")
  67. async def shutdown_event():
  68. logger.info("👋 表格线编辑器后端服务关闭")
  69. if __name__ == "__main__":
  70. import uvicorn
  71. uvicorn.run(
  72. "main:app",
  73. host="0.0.0.0",
  74. port=8000,
  75. reload=True
  76. )