Dibuja mi repo

SeeRepo con Python

SeeRepo lee Python con cables: sigue qué archivo usa a cuál, como con TypeScript y JavaScript.

Lo que lee SeeRepo

FastAPI y Flask

  • Cada decorador de ruta (@app.get, @app.post, @app.route, @router.api_route, @app.websocket…) es una parte, con su ruta completa: incluido el prefijo de su APIRouter o Blueprint.
  • Una ruta que dibuja una página (render_template, TemplateResponse…) es una pantalla; una que responde datos, una acción; un webhook, un sitemap o un feed, una puerta de API para máquinas.
  • El archivo que arranca la app (FastAPI(), Flask(__name__), app.run() o app = create_app()) es donde empiezan tus rutas.

Django

  • Un views.py que dibuja una página es una pantalla; uno que responde JSON o usa Django REST framework, una acción.
  • Tus archivos urls.py son puertas, y tus templates/ son piezas de la interfaz.

Celery

  • @shared_task y @app.task son cosas que corren solas.

Tus modelos

  • Los modelos de Django (models.Model, AbstractUser), de SQLAlchemy (clases declarativas, db.Model de Flask-SQLAlchemy, Table("…") de Core) y de SQLModel (table=True) se vuelven modelos de datos. Un BaseModel de pydantic no es una tabla, así que no.

Quién entra

Una ruta detrás de @login_required (y sus parientes), LoginRequiredMixin, Depends(get_current_user) o IsAuthenticated de Django REST framework es para Personas con cuenta. El resto, para Visitantes.

Un ejemplo de nuestro banco de pruebas

  • miguelgrinberg/microblog (Flask): 2 pantallas y 1 acción, 6 modelos de datos con SQLAlchemy (Message, Notification, Post, Task, User, followers), y Redis y Postgres como servicios. Cada ruta de app/main/routes.py pide sesión (@login_required).
  • testdrivenio/django-celery (Django): 1 pantalla y 1 tarea que corre sola, con Redis.
  • wsvincent/lithium (Django): 1 modelo de datos, CustomUser, con Postgres.

Bueno saber

  • Tus paquetes se leen de todas las listas que usa Python: requirements.txt y los archivos de una carpeta requirements/ (con los que incluyen), pyproject.toml, Pipfile y setup.cfg. Un paquete que pones en la lista pero nunca importas no sale como servicio; una base de datos sí, porque tu código muchas veces llega a ella sin importarla.