Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

463
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!