gpt4 book ai didi

http-method - 如何在 FastAPI 中执行 Post/Redirect/Get (PRG)?

转载 作者:行者123 更新时间:2023-12-03 14:14:53 26 4
gpt4 key购买 nike

我正在尝试从 POST 重定向到 GET。如何在 FastAPI 中实现这一点?

你尝试了什么?

我已经按照 Issue#863#FastAPI 的建议尝试了以下 HTTP_302_FOUND、HTTP_303_SEE_OTHER : 但没有任何作用!

它总是显示 INFO: "GET / HTTP/1.1" 405 Method Not Allowed

from fastapi import FastAPI
from starlette.responses import RedirectResponse
import os
from starlette.status import HTTP_302_FOUND,HTTP_303_SEE_OTHER

app = FastAPI()

@app.post("/")
async def login():
# HTTP_302_FOUND,HTTP_303_SEE_OTHER : None is working:(
return RedirectResponse(url="/ressource/1",status_code=HTTP_303_SEE_OTHER)


@app.get("/ressource/{r_id}")
async def get_ressource(r_id:str):
return {"r_id": r_id}

# tes is the filename(tes.py) and app is the FastAPI instance
if __name__ == '__main__':
os.system("uvicorn tes:app --host 0.0.0.0 --port 80")

你也可以看到这个问题 here at FastAPI BUGS Issues

最佳答案

我也遇到了这个,这是非常出乎意料的。我猜 RedirectResponse继承 HTTP POST 动词而不是成为 HTTP GET。 FastAPI GitHub repo 上的问题有一个很好的修复:
POST 端点

import starlette.status as status

@router.post('/account/register')
async def register_post():
# Implementation details ...

return fastapi.responses.RedirectResponse(
'/account',
status_code=status.HTTP_302_FOUND)
基本重定向 GET 端点
@router.get('/account')
async def account():
# Implementation details ...
这里重要且不明显的方面是设置 status_code=status.HTTP_302_FOUND .
有关 302 状态代码的更多信息,请查看 https://httpstatuses.com/302具体来说:

Note: For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request. If this behavior is undesired, the 307 Temporary Redirect status code can be used instead.


在这种情况下,动词变化正是我们想要的。

关于http-method - 如何在 FastAPI 中执行 Post/Redirect/Get (PRG)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62119138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com