main.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from fastapi import FastAPI
  2. from .api import vector, raster, cd_prediction, unit_grouping, water, agricultural_input, cd_flux_removal
  3. from .database import engine, Base
  4. from fastapi.middleware.cors import CORSMiddleware
  5. import logging
  6. import sys
  7. import os
  8. # 设置日志
  9. logging.basicConfig(level=logging.INFO)
  10. logger = logging.getLogger(__name__)
  11. def safe_create_tables():
  12. """
  13. 安全地创建数据库表
  14. @description: 直接创建表结构,跳过迁移检查
  15. """
  16. try:
  17. # 直接创建数据库表
  18. Base.metadata.create_all(bind=engine)
  19. logger.info("数据库表结构创建完成")
  20. except Exception as e:
  21. logger.error(f"数据库表创建失败: {str(e)}")
  22. logger.error("请检查数据库连接和表结构定义")
  23. # 不要退出,继续运行应用
  24. # sys.exit(1) # 注释掉这行,避免应用退出
  25. # 执行数据库初始化
  26. safe_create_tables()
  27. app = FastAPI(
  28. title="地图数据处理系统",
  29. description="一个用于处理地图数据的API系统",
  30. version="1.0.0",
  31. openapi_tags=[
  32. # ...(保持原有标签定义不变)
  33. ]
  34. )
  35. # ---------------------------
  36. # 添加 CORS 配置(关键修改)
  37. # ---------------------------
  38. app.add_middleware(
  39. CORSMiddleware,
  40. allow_origins=["https://soilgd.com", "http://localhost:5173", "https://www.soilgd.com"],
  41. allow_methods=["*"],
  42. allow_headers=["*"],
  43. allow_credentials=True,
  44. )
  45. # 注册路由(保持原有路由注册不变)
  46. app.include_router(vector.router, prefix="/api/vector", tags=["vector"])
  47. app.include_router(raster.router, prefix="/api/raster", tags=["raster"])
  48. app.include_router(cd_prediction.router, prefix="/api/cd-prediction", tags=["cd-prediction"])
  49. app.include_router(unit_grouping.router, prefix="/api/unit-grouping", tags=["unit-grouping"])
  50. app.include_router(water.router, prefix="/api/water", tags=["water"])
  51. app.include_router(agricultural_input.router, prefix="/api/agricultural-input", tags=["agricultural-input"])
  52. app.include_router(cd_flux_removal.router, prefix="/api/cd-flux-removal", tags=["cd-flux-removal"])
  53. @app.get("/")
  54. async def root():
  55. return {"message": "Welcome to the GIS Data Management API"}
  56. # 可选:添加健康检查端点
  57. @app.get("/health")
  58. async def health_check():
  59. return {"status": "healthy", "database": "connected"}