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

150
Views
El middleware FastApi en una carpeta diferente no funciona

Recibo este error cuando intento ejecutar mi API FastApi.

app = cls(app=app, **options) TypeError: el objeto 'módulo' no se puede llamar

Estoy tratando de agregar un middleware en otra carpeta separada de main.py y no sé por qué no funciona. De lo contrario, cuando agrego el código de middleware en main.py funciona sin problemas. Aquí está mi código, gracias por su ayuda y disculpe mi inglés.

principal.py

 from fastapi import FastAPI from fastapi import Depends, FastAPI, HTTPException from fastapi import Request from routers import rutas from utils import CheckApiKey from utils.CheckApiKey import check_api_key app = FastAPI() app.add_middleware(CheckApiKey, dispatch=check_api_key) <--- Here calling middleware app.include_router(rutas.router) if __name__ == "__main__": import uvicorn uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)

software intermedio

 from fastapi import Request async def check_api_key(request: Request, call_next): print("ok") response = await call_next(request) return response
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Encontré la solución... Tengo que crear una clase que herede de starlette basehttpmiddleare, así.

 from starlette.middleware.base import BaseHTTPMiddleware class CheckApiKey(BaseHTTPMiddleware): async def dispatch(self, request, call_next): print("ok") response = await call_next(request) return response
over 4 years ago · Santiago Trujillo Report

0

CheckApiKey parece un módulo de Python en su caso y check_api_key es la función de middleware.

El problema era que el método add_middleware() espera que el primer argumento sea una función invocable o una clase invocable . Pero en tu caso, te dieron un módulo .

Asi que,

Cambie su declaración como,

 app.add_middleware( check_api_key )
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!