Estoy haciendo una función en la que el usuario en su página de perfil realiza cambios (no relacionados con el modelo de usuario). Todo se implementa a través de plantillas HTML estáticas. Necesito que el usuario haga clic en el botón y regrese a la misma página (su página de perfil) después de procesar la solicitud.
html
<td><a href="{{ url_for('decline_event_invite', pk=invite.id) }}" class="btn blue lighten-2">Accept</a></td>puntos finales.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')perfil.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, } )Pero no puedo encontrar en ninguna parte cómo hacer una redirección similar a la lógica que se aplica a las plantillas. Por ejemplo:
<a href="{{ url_for('user_profile', pk=pk) }}">Sender</a>Puede usar la función url_for() y pasar los parámetros de ruta (**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)En caso de que también necesite pasar parámetros de consulta, use el siguiente código de muestra (asegúrese de importar urllib):
parsed = list(urllib.parse.urlparse(redirect_url)) parsed[4] = urllib.parse.urlencode({**{ 'username' : "name"}}) new_redirect_url = urllib.parse.urlunparse(parsed)