Vývoj backendu ve Flasku a Djangu: přehled frameworků

Vývoj backendu pomocí Flask a Django: Frameworky

Flask vs. Django: kdy zvolit který framework

Flask a Django jsou dva nejrozšířenější Python frameworky pro vývoj backendu. Flask je mikroframework s minimalistickým jádrem, který poskytuje velkou svobodu při návrhu architektury a výběru knihoven. Django je plnohodnotný framework typu „batteries-included“ se silnými konvencemi, integrovaným ORM, autentizací, administrací a šablonovacím systémem. Výběr závisí na požadavcích projektu, velikosti týmu a očekávané životnosti řešení.

Architektonická paradigmata a konvence

  • Flask: upřednostňuje explicitní rozhodování – sami si skládáte router, ORM, validační vrstvu, DI i úlohy na pozadí. Hodí se pro lean služby, mikroslužby, prototypy a vysoce přizpůsobené architektury.
  • Django: prosazuje „konfiguraci pomocí konvencí“. Struktura aplikace je předem daná (aplikace, modely, pohledy, šablony), což usnadňuje zapracování nových členů týmu i jeho rozšiřování.

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

Oblast Flask Django
Routing Jednoduchý router založený na dekorátorech; blueprints pro modularitu Robustní URL dispatcher s namespacy a reverzním routováním
ORM a data Výběr: SQLAlchemy, Pony ORM nebo žádné ORM Integrované Django ORM, migrace, signály, agregace
Administrace Řešení třetích stran (např. Flask-Admin); více konfigurace Vestavěná administrační sekce generovaná z modelů
Autentizace Rozšiřitelná (Flask-Login, Flask-Security) Kompletní procesy autentizace, skupiny, oprávnění, sessions
API Flask-RESTX / Marshmallow / Pydantic podle potřeby Django REST Framework (DRF) se serializéry a viewsety
Asynchronní běh Možný přes ASGI/Quart nebo hybridním přístupem Django ASGI (od verze 3.0), nativní pohledy async, Channels
Škálování Vhodný 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, události a skvělou podporu práce se spouštěči či pohledy; migrace řeší Alembic. Django používá vlastní ORM s deklarativními modely, automatickými migracemi a administračním rozhraním. U komplexních reportů a analytických dotazů se vyplatí kombinovat ORM s raw SQL.

Návrh API: REST, GraphQL a serializace

  • REST: ve Flasku se často používají Flask-RESTX/Flask-Smorest; k validaci slouží Marshmallow nebo Pydantic. V Djangu je standardem DRF s viewsety, routery, omezením počtu požadavků, stránkováním 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 komunikace v reálném čase

Pro dlouhotrvající úlohy použijte Celery (broker RabbitMQ/Redis). Komunikace v reálném čase:

  • Flask: Flask-SocketIO (přes WS/long-polling); pro čisté ASGI zvažte interoperabilitu s Quart/Starlette.
  • Django: Django Channels pro WebSockety, skupiny a stav přítomnosti; přirozeně se integruje se servery ASGI.

Bezpečnostní standardy pro produkční backend

  • HTTPS a HSTS, správně nastavené cookies Secure/HttpOnly a zásady SameSite.
  • Ochrana CSRF (ve Flasku pomocí rozšíření, v Djangu vestavěná).
  • Omezení počtu požadavků a ochrana proti útokům hrubou silou (Flask-Limiter, DRF throttling).
  • Správa tajných údajů: prostředí (.env, Vault), rotace klíčů, žádná tajemství v repozitáři.
  • Validace vstupů a sanitizace; kontrakty definované pomocí schémat (OpenAPI/JSON Schema).

Konfigurace, prostředí a zásady 12-factor

  • Oddělení konfigurace od kódu, hierarchie settings pro dev/stage/prod.
  • Neměnné sestavení, nasazování s prioritou kontejnerů (container-first), procesy bez udržování stavu (stateless).
  • Standardizované logování (JSON), korelace požadavků, metriky a trasování.

Testování a kvalita: jednotkové, integrační a end-to-end testy

  • Jednotkové testy: pytest, izolace obchodní logiky, simulace externích služeb.
  • Integrační testy: testovací klient Flask/Django, databáze v paměti nebo kontejnerizovaný Postgres.
  • E2E: Playwright/Cypress pro API/UI vrstvu, smluvní testy s OpenAPI.
  • Kontinuální integrace s coverage gates, statická analýza (ruff, mypy), hooky pre-commit.

Šablonování, vykreslování na straně serveru a headless přístup

Flask používá Jinja2, Django má vlastní šablonovací engine. U headless architektur zpřístupněte čisté JSON/GraphQL API a frontend řešte samostatně (React/Vue/Svelte). U projektů s důrazem na SEO lze kombinovat SSR a API (šablony Django/HTMX, Flask+Jinja + progresivní vylepšování).

Statická média a soubory

  • Flask: statické soubory obsluhujte přes reverzní proxy (NGINX), používejte verzování a CDN; nahrávání řešte pomocí rozšíření (Flask-Uploads) nebo vlastní logikou.
  • Django: collectstatic, storage backends (S3, GCS), nastavení podle prostředí a podepsané URL.

Vrstvy aplikace a doporučená architektura

  • Prezentační vrstva: pohledy/blueprints, DRF viewsety, serializéry.
  • Doména: servisní vrstva (případy užití), čistá obchodní logika bez závislostí na frameworku.
  • Data: návrhový vzor repository nad ORM, transakční hranice, jednotky práce.
  • Integrace: klienti externích služeb (HTTP, gRPC, message bus), definované ports/adapters.

Výkon: latence, propustnost a optimalizace dotazů

  • Profilování (py-spy, cProfile), APM (OpenTelemetry + backend).
  • Ukládání do mezipaměti: 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 operace, při nichž se čeká (síť, FS), dávkové zpracování a operace bulk.

Autentizace a autorizace

  • Založená na session: jednoduchá volba pro tradiční weby; ochrana CSRF je nezbytná.
  • Založená na tokenech: JWT, OAuth 2.0, OIDC; integrace s poskytovateli identity.
  • Role a oprávnění: Django má vestavěné Permissions/Groups; ve Flasku lze využít knihovny jako Flask-Principal nebo vlastní vrstvu zásad.

Tvorba administračního rozhraní a back-office

Django admin urychluje 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 administrační rozhraní jako samostatnou SPA nad API. Klíčové jsou auditování akcí, podrobné nastavení oprávnění a exporty (CSV/Excel).

Observabilita: logy, metriky a trasování

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

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

  • Servery: Gunicorn/Uvicorn/Hypercorn; NGINX/Envoy jako reverzní proxy.
  • Kontejnery: vícefázová sestavení, minimální základní obrazy (alpine/ubi-micro), běhové prostředí distroless.
  • CI/CD: testy, bezpečnostní skeny, migrace před spuštěním, kontroly stavu a postupné nasazování (blue-green/canary).

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

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

Práce s dlouhotrvajícími úlohami a plánováním

  • Celery pro asynchronní fronty (ETL, notifikace, tvorba miniatur), plánování pomocí beat nebo externích orchestrátorů.
  • Vzor Transactional outbox pro spolehlivé publikování událostí (Kafka, RabbitMQ).

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

Bez ohledu na framework zvažte principy DDD: agregáty, entity, objekty hodnot a 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

  • Pokud je doména nejasná, začněte ve Flasku s PoC a minimem závislostí.
  • U produktu s jasně vymezenou doménou a potřebou back-office začněte s Djangem, DRF a administračním rozhraním.
  • V obou případech definujte kontrakty OpenAPI a datové modely dříve, než začne přibývat závislostí.

Časté chyby a jak se jim vyhnout

  • „Prosakující“ doména navázaná na ORM – oddělte servisní vrstvu a validaci.
  • Nedostatečná observabilita – bez metrik a trasování neodhalíte zhoršení výkonu.
  • Neřešené migrace a kvalita dat – CI pipeline by měla zahrnovat testy migrací.
  • Přehnané využívání asynchronního zpracování – async použijte jen tam, kde zkrátí čekání, nikoli pro logiku vázanou na CPU.

Doporučené základní stacky

  • Základní stack Flask: Flask + SQLAlchemy + Alembic + Marshmallow/Pydantic + Flask-Login + Celery + klient Prometheus + OpenTelemetry.
  • Základní stack Django: Django + Django ORM + Migrations + DRF + Django Auth + Channels (podle potřeby) + Celery + cache framework + OpenTelemetry.

Shrnutí a doporučení

Flask nabízí lehkost a 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é zvážit hybridní ekosystém: monolit či modulární monolit v Djangu pro hlavní doménu a satelitní služby Flask pro specializované úlohy. Klíčem k udržitelnému vývoji jsou jasné kontrakty (OpenAPI), kvalitní testování, observabilita a zásady 12-factor – bez ohledu na zvolený framework.