为了账号安全,请及时绑定邮箱和手机立即绑定

FastAPI处理和重定向404

FastAPI处理和重定向404

江户川乱折腾 2023-03-16 16:39:33
如果存在 HTTPException,我如何使用 FastAPI 重定向请求?在 Flask 中,我们可以这样实现:@app.errorhandler(404)def handle_404(e):    if request.path.startswith('/api'):        return render_template('my_api_404.html'), 404    else:        return redirect(url_for('index'))或者在 Django 中我们可以使用 django.shortcuts:from django.shortcuts import redirectdef view_404(request, exception=None):    return redirect('/')我们如何使用 FastAPI 实现这一目标?
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

我们可以通过使用 FastAPI 的exception_handler来实现:


如果你赶时间,你可以使用这个:


from fastapi.responses import RedirectResponse

from starlette.exceptions import HTTPException as StarletteHTTPException


@app.exception_handler(StarletteHTTPException)

async def custom_http_exception_handler(request, exc):

    return RedirectResponse("/")

但更具体的方法是,您可以创建自己的异常处理程序:


class UberSuperHandler(StarletteHTTPException):

    pass

    

def function_for_uber_super_handler(request, exc):

    return RedirectResponse("/")



app.add_exception_handler(UberSuperHandler, function_for_uber_super_handler)


查看完整回答
反对 回复 2023-03-16
?
FFIVE

TA贡献1797条经验 获得超6个赞

我知道为时已晚,但这是以您个人的方式处理 404 异常的最短方法。


重定向


from fastapi.responses import RedirectResponse



@app.exception_handler(404)

async def custom_404_handler(_, __):

    return RedirectResponse("/")

自定义神社模板


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>

<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作为参数传递给函数。我用过_并且__不需要变量。


查看完整回答
反对 回复 2023-03-16
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

我用这个方法,


from fastapi.responses import RedirectResponse

from starlette.exceptions import HTTPException as StarletteHTTPException


app.mount("/static", StaticFiles(directory="static"), name="static")


templates = Jinja2Templates(directory="templates")


@app.exception_handler(StarletteHTTPException)

async def custom_http_exception_handler(request, exc):

    return templates.TemplateResponse("404.html", {"request": request})

确保你有静态文件夹,用于静态文件和模板文件夹,用于 html 文件。


查看完整回答
反对 回复 2023-03-16
  • 3 回答
  • 0 关注
  • 798 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号