main.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from fastapi import Depends, FastAPI, Request, status
  2. from fastapi.encoders import jsonable_encoder
  3. from fastapi.exceptions import RequestValidationError
  4. from fastapi.staticfiles import StaticFiles
  5. from fastapi.responses import HTMLResponse
  6. from fastapi.templating import Jinja2Templates
  7. from fastapi.responses import JSONResponse
  8. from .case import case01, case02, case03
  9. app = FastAPI(
  10. debug=False,
  11. title="API Library",
  12. description="",
  13. version="1.0.0",
  14. )
  15. # 设置静态资源目录
  16. app.mount("/static", StaticFiles(directory="static"), name="static")
  17. # 设置页面模板目录
  18. templates = Jinja2Templates(directory="templates")
  19. # 定义接管RequestValidationError的方法,捕捉422报错并进行自定义处理
  20. @app.exception_handler(RequestValidationError)
  21. async def request_validation_exception_handler(request: Request, exc: RequestValidationError) -> JSONResponse:
  22. return JSONResponse(
  23. status_code=status.HTTP_200_OK,
  24. content={
  25. "code": 1,
  26. "message": "Parameter error",
  27. "data": jsonable_encoder(exc.errors())
  28. },
  29. )
  30. # 案例API
  31. app.include_router(
  32. case01.router,
  33. prefix="/api/case/01",
  34. tags=["案例01(小小图书)"],
  35. )
  36. app.include_router(
  37. case02.router,
  38. prefix="/api/case/02",
  39. tags=["案例02(网盘助手)"],
  40. )
  41. app.include_router(
  42. case03.router,
  43. prefix="/api/case/03",
  44. tags=["案例03(小小图书2)"],
  45. )
  46. # 其他API ...
  47. @app.get("/", response_class=HTMLResponse, include_in_schema=False)
  48. async def root(request: Request):
  49. attr_text = "API Library"
  50. return templates.TemplateResponse("index.html", {"request": request, "attr_text": attr_text})