Flask a Django jako backendové frameworky pro Python

Flask vs. Django: kdy který framework zvolit

Flask a Django jsou dvě nejrozšířenější Python platformy pro vývoj backendu. Flask je mikroframework s minimalistickým jádrem, který poskytuje velkou svobodu v architektuře a volbě knihoven. Django je plnohodnotný framework typu „batteries-included“ s pevnou konvencí, integrovaným ORM, autentizací, administrací a šablonováním. Výběr závisí na požadavcích projektu, velikosti týmu a očekávané životnosti řešení.

Architektonické paradigmy a konvence

  • Flask: preferuje explicitní rozhodování – sestavujete si vlastní router, ORM, validační vrstvu, DI i backgroundové úlohy. Vhodné pro lean služby, mikroslužby, prototypy a vysoce přizpůsobené architektury.
  • Django: prosazuje „konfiguraci skrze konvence“. Aplikační struktura je předdefinovaná (aplikace, modely, pohledy, šablony), což usnadňuje onboarding a škálování týmu.

Modulární srovnání podle klíčových oblastí

Oblast Flask Django
Routing Jednoduchý dekorátorový router; blueprints pro modulárnost Robustní URL dispatcher s namespacy a reverzním routováním
ORM a data Volba: SQLAlchemy, Pony ORM nebo bez ORM Integrované Django ORM, migrace, signály, agregace
Admin Třetí strany (např. Flask-Admin); více konfigurace Vestavěná administrační sekce generovaná z modelů
Autentizace Rozšiřitelná (Flask-Login, Flask-Security) Plná autentizační pipeline, skupiny, oprávnění, sessions
API Flask-RESTX / Marshmallow / Pydantic dle volby Django REST Framework (DRF) se serializéry, viewsety
Asynchronní běh Možné přes ASGI/Quart nebo hybridní přístup Django ASGI (od verze 3.0+), nativní async views, Channels
Škálování Dobré pro mikroslužby; jemnozrnná kompozice Silný monolit i modulární monorepo; bohatý ekosystém

Datová vrstva a migrace: SQLAlchemy vs. Django ORM

Ve Flasku je nejčastější volbou SQLAlchemy (Core + ORM). Nabízí expresivní dotazování, relační joins, eventy a vynikající práci s triggery či pohledy; migrace řeší Alembic. Django používá vlastní ORM s deklarativními modely, automatickými migracemi a administračním rozhraním. Pro komplexní reporty a analytické dotazy je výhodné kombinovat ORM s raw SQL.

API návrh: REST, GraphQL a serializace

  • REST: ve Flasku často Flask-RESTX nebo Flask-Smorest; validace pomocí Marshmallow či Pydantic. V Djangu je standardem DRF s viewsety, routery, throttlingem, paginací a browsable API.
  • GraphQL: Flask integruje Graphene či Ariadne; Django nabízí Graphene-Django s mapováním na modely.
  • Serializace: Flask – Marshmallow / Pydantic; Django – DRF Serializers, ModelSerializers.

Asynchronní zpracování, WebSockety a realtime

Pro dlouhotrvající úlohy použijte Celery (broker RabbitMQ / Redis). Realtime komunikace:

  • Flask: Flask-SocketIO (podpora WebSocket / long-polling), pro čisté ASGI doporučujeme zvážit Quart / Starlette interoperabilitu.
  • Django: Django Channels pro WebSockety, skupiny a presence; přirozená integrace s ASGI servery.

Bezpečnostní standardy pro produkční backend

  • HTTPS a HSTS, správné nastavení Secure / HttpOnly cookies, politika SameSite.
  • CSRF ochrana (ve Flasku přes rozšíření, v Djangu vestavěná).
  • Rate limiting a ochrana proti bruteforce útokům (Flask-Limiter, DRF throttling).
  • Secret management: prostředí (.env, Vault), rotace klíčů, žádné tajemství v repozitáři.
  • Validace vstupů a sanitace; schema-driven kontrakty (OpenAPI / JSON Schema).

Konfigurace, prostředí a 12-factor discipliny

  • Oddělení konfigurace od kódu, hierarchie settings pro dev / stage / prod.
  • Neměnné buildy, container-first nasazování, stateless procesy.
  • Standardizované logování (JSON), korelace požadavků, metriky a tracing.

Testování a kvalita: unit, integrační a end-to-end

  • Unit testy: pytest, izolace business logiky, mocking externích služeb.
  • Integrační testy: testovací klient Flask / Django, in-memory databáze nebo kontejnerizovaný Postgres.
  • E2E: Playwright / Cypress na API / UI vrstvě, smluvní testy s OpenAPI.
  • Kontinuální integrace s coverage gates, statická analýza (ruff, mypy), pre-commit hooky.

Šablonování, server-side rendering a headless přístup

Flask používá Jinja2, Django má vlastní šablonovací engine. Pro headless architektury exportujte čisté JSON / GraphQL API a frontend řešte samostatně (React / Vue / Svelte). U projektů s důrazem na SEO lze kombinovat SSR a API (Django templates / HTMX, Flask + Jinja + progressive enhancement).

Statická média a soubory

  • Flask: správa statických souborů přes reverzní proxy (NGINX), verzování a CDN; nahrávání přes rozšíření (Flask-Uploads) nebo vlastní logiku.
  • Django: collectstatic, storage backends (S3, GCS), per-env nastavení a URL podpisy.

Vrstvy aplikace a doporučená architektura

  • Prezentace: views / blueprints, DRF viewsety, serializéry.
  • Doména: službová vrstva (use-cases), čistá business logika bez závislostí na frameworku.
  • Data: repository pattern nad ORM, transakční hranice, jednotky práce.
  • Integrace: klienti pro externí služby (HTTP, gRPC, message bus), definované ports/adapters.

Výkon: latence, propustnost a optimalizace dotazů

  • Profilování (py-spy, cProfile), APM (OpenTelemetry + backend).
  • Caching: aplikační (Flask-Caching, Django cache framework), datový (Redis), HTTP (ETag / Cache-Control).
  • Optimalizace dotazů: select_related / prefetch_related v Djangu, joinedload / subqueryload v SQLAlchemy.
  • Asynchronní I/O pro čekací operace (síť, FS), batchování a bulk operace.

Autentizace a autorizace

  • Session-based: jednoduché pro tradiční weby; CSRF ochrana nutností.
  • Token-based: JWT, OAuth 2.0, OIDC; integrace s identity providery.
  • Role a práva: v Djangu vestavěné Permissions / Groups; ve Flasku knihovny jako Flask-Principal nebo vlastní policy vrstva.

Tvorba admin rozhraní a backoffice

Django admin akceleruje CRUD operace nad daty a je ideální pro interní nástroje či správu katalogů. Ve Flasku lze kombinovat Flask-Admin / Flask-AppBuilder, případně vytvořit admin jako samostatnou SPA nad API. Klíčové je auditování akcí, granularita oprávnění a exporty (CSV / Excel).

Observabilita: logy, metriky a tracing

  • Strukturované logy s korelačním request-id a uživatelským kontextem.
  • Metriky (Prometheus klient), SLA / SLO a alerting na chybovost, latenci a saturaci.
  • Distribuovaný tracing (OpenTelemetry) pro sledování volání mezi službami.

Nasazení: WSGI / ASGI servery, kontejnery a CI/CD

  • Servery: Gunicorn / Uvicorn / Hypercorn; NGINX / Envoy jako reverzní proxy.
  • Kontejnery: vícefázové buildy, minimální base image (alpine / ubi-micro), distroless runtime.
  • CI/CD: testy, bezpečnostní skeny, migrace před startem, healthchecks a postupné nasazení (blue-green / canary).

Monolit, modulární monolit nebo mikroslužby?

Django tradičně exceluje v monolitech a modulárních monolitech s jasnými hranicemi aplikací. Flask je přirozeným kandidátem pro mikroslužby. Rozhodnutí by mělo vycházet z team topology, nezávislosti domén, rychlosti nasazení a požadavků na koordinační režii (smluvní testy, verzování API, observabilita mezi službami).

Práce s dlouhými úlohami a plánováním

  • Celery pro asynchronní fronty (ETL, notifikace, thumbnailing), plánování přes beat nebo externí orchestrátory.
  • Transactional outbox vzor pro spolehlivé publikování událostí (Kafka, RabbitMQ).

Doménově řízený návrh v Python backendech

Bez ohledu na framework zvažte DDD principy: agregáty, entity, value objekty, doménové události. Izolujte doménu od frameworku, aby byla testovatelná a přenositelná. Framework pak slouží především jako adapter pro web, data a integrace.

Mezivýsledky a PoC: jak efektivně začít

  • Pro nejasnou doménu začněte ve Flasku jako PoC s minimem závislostí.
  • Pro produkt s jasnou doménou a potřebami backoffice startujte v Djangu s DRF a adminem.
  • V obou případech definujte OpenAPI kontrakty a datové modely dříve, než porostou závislosti.

Časté chyby a jak se jim vyhnout

  • „Leaky“ doména navázaná na ORM – oddělte službovou vrstvu a validaci.
  • Nedostatečná observabilita – bez metrik a trace nevykryjete regresi výkonu.
  • Neřešené migrace a datová kvalita – CI pipeline by měla zahrnovat migrační testy.
  • Přehnaná asynchronnost – async používejte jen tam, kde zkrátí čekací dobu, ne pro CPU-bound logiku.

Doporučené „baseline“ stacky

  • Flask baseline: Flask + SQLAlchemy + Alembic + Marshmallow / Pydantic + Flask-Login + Celery + Prometheus klient + OpenTelemetry.
  • Django baseline: Django + Django ORM + Migrace + DRF + Django Auth + Channels (dle potřeby) + Celery + cache framework + OpenTelemetry.

Souhrn a doporučení

Flask nabízí lehkost, jemnou kontrolu a je ideální pro mikroslužby a vysoce specializované backendy. Django přináší rychlý start, jednotnou architekturu a bohatou výbavu pro podnikové aplikace. Pro datové a produktové týmy je pragmatické uvažovat o hybridním ekosystému: monolit či modulární monolit v Djangu pro core doménu a satelitní Flask služby pro specializované úlohy. Klíčem k udržitelnému vývoji jsou jasné kontrakty (OpenAPI), kvalitní testování, observabilita a discipliny 12-factor – bez ohledu na zvolený framework.