from fastapi import Depends, FastAPI, Request, status from fastapi.encoders import jsonable_encoder from fastapi.exceptions import RequestValidationError from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from fastapi.responses import JSONResponse from .case import case01, case02, case03 app = FastAPI( debug=False, title="API Library", description="", version="1.0.0", ) # 设置静态资源目录 app.mount("/static", StaticFiles(directory="static"), name="static") # 设置页面模板目录 templates = Jinja2Templates(directory="templates") # 定义接管RequestValidationError的方法,捕捉422报错并进行自定义处理 @app.exception_handler(RequestValidationError) async def request_validation_exception_handler(request: Request, exc: RequestValidationError) -> JSONResponse: return JSONResponse( status_code=status.HTTP_200_OK, content={ "code": 1, "message": "Parameter error", "data": jsonable_encoder(exc.errors()) }, ) # 案例API app.include_router( case01.router, prefix="/api/case/01", tags=["案例01(小小图书)"], ) app.include_router( case02.router, prefix="/api/case/02", tags=["案例02(网盘助手)"], ) app.include_router( case03.router, prefix="/api/case/03", tags=["案例03(小小图书2)"], ) # 其他API ... @app.get("/", response_class=HTMLResponse, include_in_schema=False) async def root(request: Request): attr_text = "API Library" return templates.TemplateResponse("index.html", {"request": request, "attr_text": attr_text})