我知道为时已晚,但这是以您个人方式处理 404 异常的最短方法。
重定向
from fastapi.responses import RedirectResponse
@app.exception_handler(404)
async def custom_404_handler(_, __):
return RedirectResponse("/")
自定义 Jinja 模板
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
templates = Jinja2Templates(directory="templates")
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.exception_handler(404)
async def custom_404_handler(request, __):
return templates.TemplateResponse("404.html", {"request": request})
从文件中提供 HTML
@app.exception_handler(404)
async def custom_404_handler(_, __):
return FileResponse('./path/to/404.html')
直接提供 HTML
from fastapi.responses import HTMLResponse
response_404 = """
<!DOCTYPE html>
<html lang="en">
<head>
<title>Not Found</title>
</head>
<body>
<p>The file you requested was not found.</p>
</body>
</html>
"""
@app.exception_handler(404)
async def custom_404_handler(_, __):
return HTMLResponse(response_404)
注意:exception_handler 装饰器将当前的request 和exception 作为参数传递给函数。我在不需要变量的地方使用了_ 和__。