Files
lotteryServer/main.py
2026-09-03 14:31:25 +08:00

58 lines
1.5 KiB
Python

import logging
import models
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from sqlmodel import SQLModel
from core.db import engine
from core.config.settings import settings
from api.scheduler_api import scheduler_router
from api.lottery_api import lottery_router
from core.task.dlt_scheduler import scheduler
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# lifespan生命周期
@asynccontextmanager
async def lifespan(app: FastAPI):
# ========== 启动时执行 ==========
logger.info("服务启动,开始创建数据表")
# 同步建表
SQLModel.metadata.create_all(engine)
# 启动定时调度器
scheduler.start()
yield # 此处交出控制权,服务开始运行
# ========== 关闭时执行 ==========
logger.info("服务关闭,释放资源")
scheduler.shutdown()
app = FastAPI(lifespan=lifespan)
app.include_router(scheduler_router)
app.include_router(lottery_router)
app.add_middleware(
CORSMiddleware, # type: ignore[arg-type]
allow_origins=settings.ALLOWED_ORIGINS,
allow_credentials=True,
allow_methods=settings.ALLOWED_METHODS,
allow_headers=settings.ALLOWED_HEADERS,
)
@app.get("/")
def main():
return {"message": "Hello World"}
# 启动服务 --> uvicorn: Python中的轻量级web服务器
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)