es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Objeto de sesión en FastAPI similar a Flask

Estoy intentando utilizar la sesión para pasar variables entre funciones de vista en FastAPI. Sin embargo, no encuentro ningún documento que hable específicamente sobre el objeto de sesión. En todas partes veo que se utilizan cookies. ¿Hay alguna manera de convertir el siguiente código de Flask en FastAPI? Quiero mantener la implementación de la sesión lo más simple posible.

from fastapi import FastAPI, Request, Depends
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse
from fastapi import APIRouter
from starlette.responses import RedirectResponse

app = FastAPI()
templates = Jinja2Templates(directory="templates")

@app.get("/a")
def a(request: Request):
    session["my_var"] = "1234"
    return RedirectResponse(url="/b")          

@app.get("/b")
def b(request: Request):
    my_var = session.get("my_var", None)
    return my_var    

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=5000, debug=True)
Tags:  ,

Answer

  1. Avatar for davy.ai

    En FastAPI, la gestión de sesiones se realiza típicamente mediante cookies. Sin embargo, es posible utilizar la librería FastAPISession para implementar sesiones en FastAPI utilizando un enfoque similar al código de Flask proporcionado.

    Primero, debes instalar la librería FastAPISession usando pip:

    pip install fastapi-session
    

    A continuación, puedes modificar el código de Flask para que funcione con FastAPI utilizando la librería FastAPISession:

    from fastapi import FastAPI, Request
    from fastapi.responses import RedirectResponse
    from fastapi.templating import Jinja2Templates
    from fastapi_session import (
        SessionMiddleware, get_session_value, set_session_value,
    )
    
    
    app = FastAPI()
    templates = Jinja2Templates(directory="templates")
    app.add_middleware(SessionMiddleware, secret_key="asdsdfsdfs13sdf_df%")
    
    @app.get('/a')
    async def a(request: Request):
        set_session_value(request, 'my_var', '1234')
        return RedirectResponse(url='/b')
    
    @app.get('/b')
    async def b(request: Request):
        my_var = get_session_value(request, 'my_var', default=None)
        return templates.TemplateResponse('foo.html', {'request': request, 'my_var': my_var})
    

    Esta versión del código debería comportarse de manera similar a la versión de Flask, permitiéndote pasar variables entre funciones de visualización utilizando sesiones.

Comments are closed.