Vývoj backendu pomocí Flask a Django

0
Vývoj backendu pomocí Flask a Django

Flask vs. Django: kdy který framework zvolit

Flask a Django jsou dvě nejrozšířenější Python platformy pro vývoj backendu. Flask je mikro-framework s minimalistickým jádrem, který dává velkou svobodu v architektuře a volbě knihoven. Django je plnohodnotný framework typu „batteries-included“ se silnou 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í – vy si skládáte router, ORM, validační vrstvu, DI i background úlohy. Vhodné pro lean služby, mikroslužby, prototypy a vysoce customizované architektury.
  • Django: prosazuje „konfiguraci skrze konvence“. Aplikační struktura je předem daná (aplikace, modely, pohledy, šablony), díky čemuž je onboarding a škálování týmu jednodušší.

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á admin sekce generovaná z modelů
Autentizace Rozšiřitelná (Flask-Login, Flask-Security) Plná auth pipelines, 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 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 skvělou práci s triggery či pohledy; migrace řeší Alembic. Django používá vlastní ORM s deklarativními modely, automatickými migracemi a admin 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/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 má 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 (pod WS/long-polling), pro čisté ASGI 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é Secure/HttpOnly cookies, SameSite politika.
  • CSRF ochrana (ve Flasku rozšíření, v Djangu vestavěná).
  • Rate limiting a ochrana proti bruteforce (Flask-Limiter, DRF throttling).
  • Secret management: prostředí (.env, Vault), rotace klíčů, žádná tajemství v repozitáři.
  • Input validace 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.
  • Immutabilní 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 byznys logiky, mocking externích služeb.
  • Integrační testy: testovací klient Flask/Django, in-memory DB 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 separátně (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: obsluha statik 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á byznys logika bez framework závislostí.
  • Data: repository pattern nad ORM, transakční hranice, jednotky práce.
  • Integrace: klienti na 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 nad daty a je ideální pro interní nástroje či správu katalogů. Ve Flasku lze kombinovat Flask-Admin/Flask-AppBuilder, případně postavit 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í báze (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ý kandidát pro mikroslužby. Rozhodnutí má vycházet z team topology, nezávislosti domén, rychlosti nasazení a požadavků na koordinační overhead (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 poté slouží hlavně 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 backoffice potřebami 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 vázaná na ORM – oddělte službovou vrstvu a validaci.
  • Nedostatečná observabilita – bez metrik a traců neodhalíte regresi výkonu.
  • Neřešené migrace a datová kvalita – CI pipeline by měla zahrnovat migrační testy.
  • Přehnaná asynchronnost – async použijte jen tam, kde zkrátí čekání, nikoli 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 + Migrations + 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 specifické backendy. Django přináší rychlý start, jednotnou architekturu a bohatou výbavu pro podnikové aplikace. Pro datové a produktové týmy je pragmatické zvažovat hybridní ekosystém: 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.

Poradňa

Potrebujete radu? Chcete pridať komentár, doplniť alebo upraviť túto stránku? Vyplňte textové pole nižšie. Ďakujeme ♥