Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

474
Vistas
FastAPI: recuperar la URL del nombre de la vista (nombre de la ruta)

Supongamos que tengo las siguientes vistas,

 from fastapi import FastAPI app = FastAPI() @app.get('/hello/') def hello_world(): return {"msg": "Hello World"} @app.get('/hello/{number}/') def hello_world_number(number: int): return {"msg": "Hello World Number", "number": number}

He estado usando estas funciones en Flask y Django.

  • Frasco: url_for(...)
  • Django: reverse(...)

Entonces, ¿cómo puedo obtener/construir las URL de hello_world y hello_world_number de manera similar?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Tenemos el método Router.url_path_for(...) que se encuentra dentro del paquete starlette

Método 1: Uso de la instancia de FastAPI

Este método es útil cuando puede acceder a la instancia de FastAPI en su contexto actual. (Gracias a @Yagizcan Degirmenci )

 from fastapi import FastAPI app = FastAPI() @app.get('/hello/') def hello_world(): return {"msg": "Hello World"} @app.get('/hello/{number}/') def hello_world_number(number: int): return {"msg": "Hello World Number", "number": number} print(app.url_path_for('hello_world')) print(app.url_path_for('hello_world_number', number=1)) print(app.url_path_for('hello_world_number', number=2)) # Results "/hello/" "/hello/1/" "/hello/2/"

Retirarse

  • Si usamos APIRouter , es posible que router.url_path_for('hello_world') no funcione, ya que el router no es una instancia de la clase FastAPI . Es decir, debemos tener la instancia de FastAPI para resolver la URL

Método 2: instancia de Request

Este método es útil cuando puede acceder a la instancia de Request (la solicitud entrante), generalmente, dentro de una vista.

 from fastapi import FastAPI, Request app = FastAPI() @app.get('/hello/') def hello_world(): return {"msg": "Hello World"} @app.get('/hello/{number}/') def hello_world_number(number: int): return {"msg": "Hello World Number", "number": number} @app.get('/') def named_url_reveres(request: Request): return { "URL for 'hello_world'": request.url_for("hello_world"), "URL for 'hello_world_number' with number '1'": request.url_for("hello_world_number", number=1), "URL for 'hello_world_number' with number '2''": request.url_for("hello_world_number", number=2}) } # Result Response { "URL for 'hello_world'": "http://0.0.0.0:6022/hello/", "URL for 'hello_world_number' with number '1'": "http://0.0.0.0:6022/hello/1/", "URL for 'hello_world_number' with number '2''": "http://0.0.0.0:6022/hello/2/" }

Retirarse

  • Debemos incluir el parámetro de request en cada vista (o requerida) para resolver la URL, lo que podría generar una sensación desagradable para los desarrolladores.
over 4 years ago · Santiago Trujillo Denunciar

0

En realidad, no es necesario reinventar la rueda. FastAPI es compatible con esto listo para usar (en realidad, Starlette) , y funciona bastante bien.

 app = FastAPI() @app.get("/hello/{number}/") def hello_world_number(number: int): return {"msg": "Hello World Number", "number": number}

Si tiene un punto final como este, simplemente puede usar

 In: app.url_path_for("hello_world_number", number=3) In: app.url_path_for("hello_world_number", number=50) Out: /hello/3/ Out: /hello/50/

En FastAPI , APIRouter y FastAPI(APIRoute) se heredan del enrutador (de Starlette), por lo tanto, si tiene un APIRouter como este, puede seguir usando esta función.

 router = APIRouter() @router.get("/hello") def hello_world(): return {"msg": "Hello World"} In: router.url_path_for("hello_world") Out: /hello
over 4 years ago · Santiago Trujillo Denunciar

0

url_for existe, pero lo proporciona starlette, el servidor que sustenta FastApi: https://www.starlette.io/routing/#reverse-url-lookups

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda