from pathlib import Path from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates from tortoise.contrib.fastapi import register_tortoise from api.actors import router as actors_router from api.movies import router as movies_router from api.responses import success_response from api.studios import router as studios_router from settings import TORTOISE_ORM BASE_DIR = Path(__file__).resolve().parent app = FastAPI(title="电影管理 API") app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=False, allow_methods=["*"], allow_headers=["*"], ) register_tortoise(app=app, config=TORTOISE_ORM) app.mount( "/static", StaticFiles(directory=BASE_DIR / "upimg"), name="static", ) templates = Jinja2Templates(directory=BASE_DIR / "templates") app.include_router(movies_router, prefix="/movies", tags=["电影"]) app.include_router(studios_router, prefix="/studios", tags=["制片公司"]) app.include_router(actors_router, prefix="/actors", tags=["演员"]) @app.get("/") async def get_home(): return success_response( data={"docs": "/docs"}, message="电影管理 API 运行正常", ) @app.get("/demo/query") async def get_query_parameters(request: Request): return success_response(data=dict(request.query_params)) @app.post("/demo/body") async def get_request_body(request: Request): return success_response(data=await request.json()) @app.get("/pages/movies") async def render_movies_page(request: Request): return templates.TemplateResponse( request=request, name="index.html", context={ "movies": ["肖申克的救赎", "霸王别姬", "星际穿越", "千与千寻"], }, )