返回 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) 我正在使用 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)
我该如何解决这个问题?先谢谢您的帮助。
我想从 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)
有人有想法吗?
我想使用从 发送数据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)
result或msg通过RedirectResponse,url_for() …FastAPI 中的端点GET返回正确的结果,但405 method not allowed在curl -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)