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

316
Views
¿Es posible usar FastAPI con Django?

Soy un desarrollador de Django y recientemente me topé con el marco FastAPI.

Entonces decidí darle una oportunidad. Pero, por lo general, cuando habla sobre la creación de API RESTful con Django, generalmente usa Django Rest Framework (DRF).

¿Alguien sabe si es posible sustituir DRF por FastAPI usando las ventajas de Django, como su ORM, y aún tener acceso a todas las funciones async de FastAPI?

Hasta ahora solo encontré un artículo sobre esto. Pero en el proceso de integración, el autor perdió la mayoría de las características de FastAPI. Puedes encontrarlo aquí .

En los documentos de FastAPI, mencionan que es posible redirigir ciertas solicitudes a una aplicación WSGI aquí .

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Respuesta corta

Sí, es posible con WSGIMiddleware .

Por ejemplo, puede usar todas las funciones de Django (sí, administrador también) con el montaje, con este código de ejemplo.

 import os from importlib.util import find_spec from configurations.wsgi import get_wsgi_application from fastapi import FastAPI from fastapi.middleware.wsgi import WSGIMiddleware from fastapi.staticfiles import StaticFiles from api import router os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings") os.environ.setdefault("DJANGO_CONFIGURATIN", "Localdev") application = get_wsgi_application() app = FastAPI() app.mount("/admin", WSGIMiddleware(application)) app.mount("/static" StaticFiles( directory=os.path.normpath( os.path.join(find_spec("django.contrib.admin").origin, "..", "static") ) ), name="static", )

También este es de la documentación de WSGIMiddleware , es un ejemplo más directo ( Este es para Flask pero demuestra la misma idea ).

 from fastapi import FastAPI from fastapi.middleware.wsgi import WSGIMiddleware from flask import Flask, escape, request flask_app = Flask(__name__) @flask_app.route("/") def flask_main(): name = request.args.get("name", "World") return f"Hello, {escape(name)} from Flask!" app = FastAPI() @app.get("/v2") def read_main(): return {"message": "Hello World"} app.mount("/v1", WSGIMiddleware(flask_app))
over 4 years ago · Santiago Trujillo Report

0

Gracias por las increíbles respuestas. Aquí hay una pequeña respuesta modificada donde arreglé algunas importaciones y usé un modelo de una aplicación Django.

 from fastapi import FastAPI from fastapi.middleware.wsgi import WSGIMiddleware from django.core.wsgi import get_wsgi_application import os from importlib.util import find_spec from fastapi.staticfiles import StaticFiles from django.conf import settings # Export Django settings env variable os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') # Get Django WSGI app django_app = get_wsgi_application() # Import a model # And always import your models after you export settings # and you get Django WSGI app from accounts.models import Account # Create FasatAPI instance app = FastAPI() # Serve Django static files app.mount('/static', StaticFiles( directory=os.path.normpath( os.path.join(find_spec('django.contrib.admin').origin, '..', 'static') ) ), name='static', ) # Define a FastAPI route @app.get('/fastapi-test') def read_main(): return { 'total_accounts': Account.objects.count(), 'is_debug': settings.DEBUG } # Mount Django app app.mount('/django-test', WSGIMiddleware(django_app))

Sugerencia: creé un archivo llamado app.py en el directorio raíz de mi proyecto Django y funcionó. Aquí está mi estructura de directorios:

 . ├── accounts │  ├── __init__.py │  ├── admin.py │  ├── apps.py │  ├── migrations │  │  ├── 0001_initial.py │  │  ├── __init__.py │  ├── models.py │  ├── tests.py │  └── views.py ├── app.py ├── db.sqlite3 ├── project │  ├── __init__.py │  ├── asgi.py │  ├── settings.py │  ├── urls.py │  └── wsgi.py └── manage.py

Y ejecute su aplicación FastAPI:

 (myvenv) ➜ project uvicorn --host 0.0.0.0 --port 8000 app:app --reload INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) INFO: Started reloader process [48366] using statreload INFO: Started server process [48368] INFO: Waiting for application startup. INFO: Application startup complete.

Se espera que esto funcione para usted. Ahora acceder a /django-test servirá a su proyecto Django y /fastapi-test servirá a la parte FastAPI.

Esta configuración también sirve archivos estáticos de Django y también podemos usar nuestros modelos de Django en nuestro código FastAPI. Lo probaré más y actualizaré esta respuesta si encuentro alguna posibilidad de mejora.

over 4 years ago · Santiago Trujillo Report

0

hay un buen recurso de la siguiente manera:

Combine el poder de FastAPI y Django

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!