【发布时间】:2022-08-09 20:14:05
【问题描述】:
我想使用RedirectResponse 将数据从app.post() 发送到app.get()。
@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
@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)
- 如何通过
RedirectResponse、url_for向app.get()发送result或msg? - 有没有办法不将 URL 中的数据显示/隐藏为
path parameter或query parameter?我如何做到这一点?尝试这种方式时出现错误
starlette.routing.NoMatchFound: No route exists for name \"homepage\" and params \"result\".。更新:
我试过这样做-
return RedirectResponse(app.url_path_for(name=\'homepage\') + \'?result=\' + str(trans), status_code=status.HTTP_303_SEE_OTHER)这可行,但通过将参数发送为
query参数来实现,即,URL 看起来像这样localhost:8000/?result=hello。有没有办法做同样的事情,但没有在 URL 中显示?
-
请查看答案here 和here(您应该使用
request.url_for()中的方法名称,即get_main_data)。至于隐藏URL中的数据,请看this answer。 -
我试过了。在这两种情况下,我都会遇到相同的错误。也使用
router。也尝试了get_main_data,结果相同
标签: fastapi