Django segue l'architettura MVT (Model-View-Template) — la sua variazione sul classico pattern MVC. Separa un'applicazione in tre livelli: Models (dati), Views (logica) e Templates (presentazione). Comprendere i livelli chiarisce dove appartiene ogni pezzo di codice.
I tre livelli
Model → the DATA layer: defines structure & talks to the database (the ORM)
View → the LOGIC layer: processes requests, fetches data, returns responses
Template → the PRESENTATION layer: HTML with placeholders for dynamic data
Come funzionano insieme (il flusso delle richieste)
Request → URLconf (routing) → VIEW → queries MODELS → renders TEMPLATE → Response
# MODEL — defines the data (models.py)
class Article(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
# VIEW — the logic: fetch data, pass to a template (views.py)
def article_list(request):
articles = Article.objects.all() # query the MODEL
return render(request, "articles.html", {"articles": articles}) # render a TEMPLATE
<!-- TEMPLATE — presentation: HTML + dynamic data (articles.html) -->
{% for article in articles %}
<h2>{{ article.title }}</h2>
<p>{{ article.body }}</p>
{% endfor %}
La view lega tutto insieme: riceve la richiesta, interroga i modelli per i dati e renderizza un template con quei dati per produrre la risposta.
MVT vs MVC
Classic MVC: Model — View — Controller
Django MVT: Model — Template — View
The mapping (a common point of confusion):
Django's VIEW ≈ MVC's CONTROLLER (the logic that handles requests)
Django's TEMPLATE ≈ MVC's VIEW (the presentation)
Model is the same in both
→ Django says the framework itself acts as the "controller" (URL routing/dispatch).
La denominazione differisce da MVC: la View di Django svolge il ruolo del Controller di MVC (logica di gestione delle richieste), e il Template di Django svolge la View di MVC (presentazione). Il routing del framework gestisce l'instradamento.
Perché questa separazione è importante
✓ Separation of concerns — data, logic, and presentation are independent
✓ Maintainability — change the template without touching logic, etc.
✓ Reusability & testability — test views independently, reuse models/templates
Perché è importante
L'architettura MVT è il pattern strutturale fondamentale di ogni applicazione Django — comprenderlo ti dice dove appartiene ogni pezzo di codice (definizioni dei dati nei modelli, logica di gestione delle richieste nelle view, presentazione HTML nei template), il che è essenziale per organizzare correttamente qualsiasi progetto Django.
La separazione delle responsabilità che applica rende le applicazioni mantenibili (modifica la presentazione senza toccare la logica), testabili (testa le view e i modelli indipendentemente) e riutilizzabili.
Equalmente importante è comprendere il mapping MVT-vs-MVC — una frequente fonte di confusione — dove la "View" di Django è in realtà l'equivalente del controller (la logica) e il "Template" di Django è l'equivalente della view (la presentazione); conoscere questo chiarisce la denominazione e aiuta gli sviluppatori che provengono da framework MVC.
Il flusso delle richieste (URL routing → view → modelli → template → risposta) è il modello mentale per come ogni richiesta Django viene elaborata, rendendo MVT una conoscenza fondamentale e irrinunciabile che sottende come strutturi e ragioni su tutto il codice Django.
