main.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from pathlib import Path
  2. from fastapi import FastAPI, Request
  3. from fastapi.middleware.cors import CORSMiddleware
  4. from fastapi.staticfiles import StaticFiles
  5. from fastapi.templating import Jinja2Templates
  6. from tortoise.contrib.fastapi import register_tortoise
  7. from api.actors import router as actors_router
  8. from api.movies import router as movies_router
  9. from api.responses import success_response
  10. from api.studios import router as studios_router
  11. from settings import TORTOISE_ORM
  12. BASE_DIR = Path(__file__).resolve().parent
  13. app = FastAPI(title="电影管理 API")
  14. app.add_middleware(
  15. CORSMiddleware,
  16. allow_origins=["*"],
  17. allow_credentials=False,
  18. allow_methods=["*"],
  19. allow_headers=["*"],
  20. )
  21. register_tortoise(app=app, config=TORTOISE_ORM)
  22. app.mount(
  23. "/static",
  24. StaticFiles(directory=BASE_DIR / "upimg"),
  25. name="static",
  26. )
  27. templates = Jinja2Templates(directory=BASE_DIR / "templates")
  28. app.include_router(movies_router, prefix="/movies", tags=["电影"])
  29. app.include_router(studios_router, prefix="/studios", tags=["制片公司"])
  30. app.include_router(actors_router, prefix="/actors", tags=["演员"])
  31. @app.get("/")
  32. async def get_home():
  33. return success_response(
  34. data={"docs": "/docs"},
  35. message="电影管理 API 运行正常",
  36. )
  37. @app.get("/demo/query")
  38. async def get_query_parameters(request: Request):
  39. return success_response(data=dict(request.query_params))
  40. @app.post("/demo/body")
  41. async def get_request_body(request: Request):
  42. return success_response(data=await request.json())
  43. @app.get("/pages/movies")
  44. async def render_movies_page(request: Request):
  45. return templates.TemplateResponse(
  46. request=request,
  47. name="index.html",
  48. context={
  49. "movies": ["肖申克的救赎", "霸王别姬", "星际穿越", "千与千寻"],
  50. },
  51. )