相关疑难解决方法(0)

fastapi (starlette) RedirectResponse 重定向到 post 而不是 get 方法

返回 RedirectResponse 对象后,我遇到了奇怪的重定向行为

事件.py

router = APIRouter()

@router.post('/create', response_model=EventBase)
async def event_create(
        request: Request,
        user_id: str = Depends(get_current_user),
        service: EventsService = Depends(),
        form: EventForm = Depends(EventForm.as_form)
):
    event = await service.post(
       ...
   )
    redirect_url = request.url_for('get_event', **{'pk': event['id']})
    return RedirectResponse(redirect_url)


@router.get('/{pk}', response_model=EventSingle)
async def get_event(
        request: Request,
        pk: int,
        service: EventsService = Depends()
):
    ....some logic....
    return templates.TemplateResponse(
        'event.html',
        context=
        {
            ...
        }
    )
Run Code Online (Sandbox Code Playgroud)

路由器.py

api_router = APIRouter()

...
api_router.include_router(events.router, prefix="/event")
Run Code Online (Sandbox Code Playgroud)

这段代码返回结果

127.0.0.1:37772 - "POST /event/22 HTTP/1.1" 405 Method Not …
Run Code Online (Sandbox Code Playgroud)

python starlette fastapi

11
推荐指数
1
解决办法
2万
查看次数

如何从一个域重定向到另一个域并为另一个域设置 cookie 或标头?

我正在使用 FastAPIRedirectResponse并尝试将用户从一个应用程序(域)重定向到另一个应用程序(域),并在 ; 中设置一些responsecookie 然而,cookie 总是被删除/不被传输。如果我尝试添加一些标头,我添加到的所有标头RedirectResponse也不会传输。

@router.post("/callback")
async def sso_callback(request: Request):
   jwt_token = generate_token(request)
   redirect_response = RedirectResponse(url="http://192.168.10.1/app/callback", 
                             status_code=303)
   redirect_response.set_cookie(key="accessToken", value=jwt_token, httponly=True)
   redirect_response.headers["Authorization"] = str(jwt_token)
   return redirect_response
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?先谢谢您的帮助。

python cookies redirect cross-domain fastapi

10
推荐指数
1
解决办法
8893
查看次数

如何使用 url_for() 将路径和查询数据传递到使用 FastAPI 和 Jinja2 的路由?

我想从 Jinja2 模板中调用 FastAPI 路由,并将路径查询数据(参数)传递给该路由。我在 Jinja2 模板中尝试过如下所示:

{{ url_for('function1', uustr=data.uustr, interval=1) }}
Run Code Online (Sandbox Code Playgroud)

这是我想要调用的 FastAPI 路由(为了演示目的,语法已被简化):

@app.get("/updates/data/{uustr}",response_class=HTMLResponse)
async def function1(request: Request, uustr:str, interval:int):

  return"""
<html>
    <head>
        <title>{{ uustr }}</title>
    </head>
    <body>
        <h1>{{ interval }}</h1>
    </body>
</html>
"""
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

raise ValueError('context must include a "request" key') 
ValueError: context must include a "request" key
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

python jinja2 fastapi

5
推荐指数
2
解决办法
5265
查看次数

如何在 FastAPI 中将 RedirectResponse 从 POST 发送到 GET 路由?

我想使用从 发送数据app.post()到。app.get()RedirectResponse

@app.get('/', response_class=HTMLResponse, name='homepage')
async def get_main_data(request: Request,
                        msg: Optional[str] = None,
                        result: Optional[str] = None):
    if msg:
        response = templates.TemplateResponse('home.html', {'request': request, 'msg': msg})
    elif result:
        response = templates.TemplateResponse('home.html', {'request': request, 'result': result})
    else:
        response = templates.TemplateResponse('home.html', {'request': request})
    return response
Run Code Online (Sandbox Code Playgroud)
@app.post('/', response_model=FormData, name='homepage_post')
async def post_main_data(request: Request,
                         file: FormData = Depends(FormData.as_form)):
       if condition:
        ......
        ......

        return RedirectResponse(request.url_for('homepage', **{'result': str(trans)}), status_code=status.HTTP_302_FOUND)

    return RedirectResponse(request.url_for('homepage', **{'msg': str(err)}), status_code=status.HTTP_302_FOUND)
Run Code Online (Sandbox Code Playgroud)
  1. 我如何发送resultmsg通过RedirectResponse,url_for() …

fastapi

5
推荐指数
1
解决办法
1万
查看次数

FastAPI GET 端点返回“405 method not allowed”响应

FastAPI 中的端点GET返回正确的结果,但405 method not allowedcurl -I使用时返回。所有GET端点都会发生这种情况。因此,应用程序正在运行,但负载均衡器对应用程序的运行状况检查失败。

有什么建议可能是错误的吗?

代码

@app.get('/health')
async def health():
    """
    Returns health status
    """
    return JSONResponse({'status': 'ok'})
Run Code Online (Sandbox Code Playgroud)

结果

curl http://172.xx.xx.xx:8080
Run Code Online (Sandbox Code Playgroud)

返回标头

curl -I http://172.xx.xx.xx:8080
Run Code Online (Sandbox Code Playgroud)

python rest http-status-code-405 fastapi

5
推荐指数
1
解决办法
7068
查看次数