Programování

Django vs. Flask vs. FastAPI: který Python framework zvolit

Věcné srovnání tří nejrozšířenějších webových frameworků v Pythonu – filozofie, ukázky kódu, databáze, administrace, async a doporučení podle typu projektu.

12. 10. 2026 · 4 min čtení

Django, Flask a FastAPI jsou tři nejpoužívanější webové frameworky v Pythonu. Všechny jsou zralé, dobře dokumentované a vhodné pro produkci. Liší se ale v tom, kolik toho za vás rozhodnou. Správná volba závisí na tom, co stavíte, ne na tom, který je „nejlepší“.

Filozofie v jedné větě

  • Django – „baterie v balení“: ORM, migrace, administrace, autentizace, formuláře a šablony v jednom.
  • Flask – mikroframework: routování a šablony, zbytek si vyberete z rozšíření.
  • FastAPI – moderní framework pro API postavený na typových anotacích, Pydanticu a ASGI.

Stejný endpoint třikrát

Flask:

from flask import Flask, jsonify

app = Flask(__name__)

@app.get("/produkty/<int:pid>")
def produkt(pid):
    return jsonify({"id": pid, "nazev": "Hrnek"})

FastAPI:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Produkt(BaseModel):
    id: int
    nazev: str

@app.get("/produkty/{pid}", response_model=Produkt)
def produkt(pid: int):
    return Produkt(id=pid, nazev="Hrnek")

Django (zkráceně – model, view a URL jsou v oddělených souborech):

# models.py
from django.db import models

class Produkt(models.Model):
    nazev = models.CharField(max_length=200)

# views.py
from django.http import JsonResponse
from django.shortcuts import get_object_or_404

def produkt(request, pid):
    p = get_object_or_404(Produkt, pk=pid)
    return JsonResponse({"id": p.pk, "nazev": p.nazev})

# urls.py
from django.urls import path
urlpatterns = [path("produkty/<int:pid>/", produkt)]

Django vyžaduje víc struktury hned od začátku, ale za to rovnou čte z databáze s migracemi.

Srovnávací tabulka

Django Flask FastAPI
Typ full-stack mikro API-first
ORM a migrace vestavěné rozšíření (Flask-SQLAlchemy, Flask-Migrate) vlastní volba (SQLAlchemy, SQLModel)
Administrace vestavěná /admin rozšíření (Flask-Admin) není vestavěná
Autentizace uživatelů vestavěná rozšíření (Flask-Login) nástroje pro OAuth2/JWT, zbytek sami
Šablony HTML ano (DTL) ano (Jinja2) lze (Jinja2), ale není to hlavní účel
Validace vstupu formuláře, DRF serializery ručně / rozšíření Pydantic z anotací
OpenAPI dokumentace přes DRF + rozšíření přes rozšíření automaticky
Rozhraní serveru WSGI i ASGI WSGI ASGI
Async částečně (async views, ORM se postupně rozšiřuje) async views od 2.0, ale stále WSGI nativně

Django: když stavíte celou aplikaci

Silné stránky:

  • Admin – z modelů získáte webové rozhraní pro správu dat bez psaní kódu. Pro interní nástroje a redakční systémy obrovská úspora času.
  • ORM a migrace – python manage.py makemigrations a migrate hlídají schéma databáze.
  • Bezpečnost ve výchozím stavu – ochrana proti CSRF, XSS v šablonách, SQL injection přes ORM, bezpečné ukládání hesel.
  • Ekosystém – Django REST Framework pro API, django-allauth pro přihlášení přes sociální sítě, Celery pro úlohy na pozadí.

Slabší stránky: pro malou službu je to hodně struktury, a pokud nechcete jeho ORM nebo šablony, jdete proti frameworku.

Typické projekty: e-shopy, CMS, intranety, SaaS s uživatelskými účty, cokoli s administrací.

Flask: když chcete mít vše pod kontrolou

Silné stránky:

  • Jednoduchost – celou aplikaci lze napsat do jednoho souboru a pochopit za odpoledne.
  • Volnost – databázi, autentizaci i strukturu projektu si zvolíte sami.
  • Výborný pro výuku – je vidět, jak web funguje, bez vrstev magie.

Slabší stránky: u většího projektu sami řešíte architekturu a skládáte rozšíření, jejichž kvalita a údržba se liší.

Typické projekty: menší weby, prototypy, jednoduchá API, webová rozhraní pro skripty, výuka.

FastAPI: když stavíte API

Silné stránky:

  • Validace a dokumentace z typů – jedna anotace = kontrola vstupu, serializace výstupu a Swagger UI na /docs.
  • Async – přirozené pro služby, které čekají na jiné služby, databáze nebo LLM API.
  • Závislosti (Depends) – čistý způsob, jak předávat databázová spojení, aktuálního uživatele nebo nastavení.
  • Výkon – díky ASGI (Starlette, Uvicorn) patří mezi rychlejší Python frameworky, typicky ale stejně rozhoduje databáze.

Slabší stránky: žádný admin, žádné ORM, žádné uživatelské účty. Pro klasickou webovou aplikaci s formuláři si toho musíte hodně doplnit.

Typické projekty: REST API pro mobilní aplikaci nebo SPA frontend, mikroslužby, backendy pro ML modely, webhooky.

Rozhodovací pomůcka

  1. Potřebujete administraci a uživatelské účty a vracíte HTML? → Django.
  2. Stavíte čisté JSON API pro frontend nebo jiné služby? → FastAPI (nebo Django + DRF, pokud chcete i admin).
  3. Malý web, prototyp nebo se učíte? → Flask.
  4. Hodně souběžných spojení, websockety, streamování? → FastAPI (nebo Django s Channels).
  5. Tým už jeden z nich zná? → To je často nejsilnější argument.

Nasazení

Všechny tři běží za reverzní proxy (Nginx, Caddy):

  • Django a Flask (WSGI): Gunicorn, uWSGI.
  • FastAPI a async Django (ASGI): Uvicorn, případně Gunicorn s Uvicorn workery.

Přechod později není nemožný. Business logiku držte v obyčejných Python modulech, ne v pohledech, a výměna frameworku pak znamená hlavně přepsat tenkou vrstvu routování.

Pokud váháte nad konkrétním projektem, popište ho ColdHost AI v režimu Programování – požádejte o návrh struktury v obou kandidátech a porovnejte, který kód se vám bude lépe udržovat.