如何重定向到FastAPI终结点内动态URL [英] How to redirect to dynamic url inside fastapi endpoint
本文介绍了如何重定向到FastAPI终结点内动态URL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在做一个功能,用户在他们的个人资料页面上进行更改(与用户模型无关)。一切都是通过静态html模板实现的。我需要用户点击按钮,并返回到同一页(他们的个人资料页)后处理的请求。 html
<td><a href="{{ url_for('decline_event_invite', pk=invite.id) }}" class="btn blue lighten-2">Accept</a></td>
endpoint ts.py
@router.get('/invite/{pk}/decline')
async def decline_event_invite(
request: Request,
pk: int,
user_id: str = Depends(get_current_user),
service: InviteService = Depends(),
):
await service.invite_decline(pk)
...
--> here I want redirect to user profile page
return RedirectResponse('DYNAMIC URL WITH ARGS')
profile.py
@router.get('/{pk}')
async def user_profile(
request: Request,
pk: int,
service: UserService = Depends()
):
user = await service.get_user_info(pk)
events_invites = await service.get_user_events_invite_list(pk)
return templates.TemplateResponse(
'profile.html',
context=
{
'request': request,
'user': user,
'events_invites': events_invites,
}
)
但我在任何地方都找不到如何执行类似于应用于模板的逻辑的重定向。例如
<a href="{{ url_for('user_profile', pk=pk) }}">Sender</a>
推荐答案
可以使用url_for()函数并传递(**kwargs)路径参数。
import uvicorn
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
from fastapi.responses import RedirectResponse
import urllib
from fastapi import APIRouter
router = APIRouter()
templates = Jinja2Templates(directory="templates")
@router.get('/invite/{pk}/decline')
async def decline_event_invite(request: Request, pk: int):
redirect_url = request.url_for('user_profile', **{ 'pk' : pk})
return RedirectResponse(redirect_url)
@router.get('/{pk}')
async def user_profile(request: Request, pk: int):
return templates.TemplateResponse("profile.html", {"request": request, "pk": pk})
if __name__ == "__main__":
uvicorn.run(router, host='127.0.0.1', port=8000, debug=True)
如果您还需要传递查询参数,请使用以下示例代码(确保导入urllib):
parsed = list(urllib.parse.urlparse(redirect_url))
parsed[4] = urllib.parse.urlencode({**{ 'username' : "name"}})
new_redirect_url = urllib.parse.urlunparse(parsed)
这篇关于如何重定向到FastAPI终结点内动态URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文