Django 5.2.3

Django 5.2.3

Abbiamo già parlato in un altro articolo di Django 5.2 e di cosa sono i framework Python. Precisiamo che questo articolo Django 5.2.3 si rivolge a sviluppatori Pyrthon.

Data di rilascio e ciclo di vita Django 5.2.3

  • Django 5.2.3 è stato ufficialmente pubblicato il 10 giugno 2025, come bugfix release per il ramo 5.2, per completare la mitigazione della vulnerabilità CVE‑2025‑48432 e correggere alcune regressioni introdotte in 5.2.2.
  • Django 5.2.4 è previsto per il 2 luglio 2025, e includerà ulteriori correzioni di bug emersi dopo il rilascio di 5.2.3.
  • Il ramo 5.2 è un LTS (Long‑Term Support), con fine supporto mainstream a dicembre 2025 e fine supporto esteso ad aprile 2028.
  • In base alla roadmap ufficiale, Django 6.0 è pianificato per dicembre 2025, seguito da Django 6.1 (agosto 2026), 6.2 LTS (aprile 2027) e 7.0 (dicembre 2027).

1. Panoramica delle novità in Django 5.2

Rilasciato il 2 aprile 2025, Django 5.2 introduce diverse feature e miglioramenti di basso livello:

  • Compatibilità Python
    Supporto ufficiale per Python 3.10, 3.11, 3.12 e 3.13. Si raccomanda di usare sempre la versione più aggiornata di ogni serie.
  • Import automatico dei modelli nella shell
    manage.py shell importa automaticamente i modelli di tutte le app installate.
$ python -m django shell --verbosity=2
6 oggetti importati automaticamente, inclusi:
  from django.contrib.auth.models import User, Group, Permission

  • CompositePrimaryKey
    Nuova classe django.db.models.CompositePrimaryKey per chiave primaria composta:
from django.db import models

class Release(models.Model):
    pk = models.CompositePrimaryKey("version", "name")
    version = models.IntegerField()
    name    = models.CharField(max_length=20)
  • Override semplificato di BoundField
    Si può specificare bound_field_class a livello di progetto, form o singolo campo, senza ridefinire Field.get_bound_field().
  • Nuove API per Request/Response
    • HttpResponse.text restituisce la rappresentazione testuale di content.
    • HttpRequest.get_preferred_type() individua il media type preferito dal client.
    • Il parametro preserve_request in HttpResponseRedirect, redirect() e simili per mantenere metodo e body nei redirect.
  • Miglioramenti alle migration
    • AlterConstraint esegue alter senza droppare e ricreare constraint.
    • Expression.set_returning e allows_composite_expressions per funzioni set‑returning e composite PK.
  • Testing
    • Stack frame interni nascosti nei messaggi di errore, migliorando la leggibilità.
    • --pdb entra direttamente nel test fallito.
    • Fixture con serialized_rollback=True disponibili in TransactionTestCase.setUpClass().

2. Bugfix e cambiamenti di basso livello in 5.2.3

Il rilascio di Django 5.2.3 si focalizza su:

  1. Mitigazione log injection
    Passaggio di tutte le operazioni di logging di risposta a django.utils.log.log_response(), che esegue escaping sicuro degli argomenti (CVE‑2025‑48432).
  2. Regressione in QuerySet.bulk_update()
    Corretto il comportamento che convertiva None in JSON null anziché SQL NULL per campi JSONField.
  3. Regressione in MediaType.params
    Ripristinato il parametro q rimosso accidentalmente dalla proprietà interna django.http.MediaType.params.

3. Punti salienti di 5.2.4 e roadmap verso 6.0

Django 5.2.4 (previsto 2 luglio 2025) si concentra su:

  • Correzione di HttpRequest.get_preferred_type() che preferiva media type più specifici con qualità inferiore.
  • Messa a punto della serializzazione di Value(None, JSONField()) nei When.

Roadmap future

Release SeriesRelease DateEnd mainstreamEnd extended
6.0December 2025August 2026April 2027
6.1August 2026April 2027December 2027
6.2 (LTS)April 2027December 2027April 2030
7.0December 2027August 2028April 2029


4. Criticità e casi pratici Django 5.2.3

  1. Caracter set MySQL cambiato
    • In Django 5.2 la connessione MySQL di default usa utf8mb4 (invece di utf8mb3).
    • Impatto: tabelle legacy potrebbero non essere compatibili.
    • Soluzione: specificare OPTIONS: {'charset': 'utf8mb3'} in DATABASES.
  2. CompositePrimaryKey e migrazioni
    • I migration tool devono riconoscere chiavi composte: attenzione a custom migration operations.
    • Esempio pratico: aggiungere un campo a modello con chiave composta richiede AlterField e AlterConstraint.
  3. Cambio di default in Oracle e PostgreSQL
    • SQLite ora supporta VARCHAR illimitati: max_length non più obbligatorio.
    • PostgreSQL 14+ consente memory e serialize in QuerySet.explain().

5. Testing e strumenti di supporto

  • TestCase e TransactionTestCase
    • Con 5.2 stack interni nascosti e --pdb.
    • Fixture con rollback serializzato disponibili in setUpClass().
  • CI/CD
    • Aggiornare pipeline per testare su Python 3.13.
    • Integrare linting con flake8-django e isort.
    • Assicurarsi che i test di integrazione con DB (PostgreSQL/MySQL) coprano le nuove opzioni di explain().
  • Dipendenze
    • Verificare compatibilità di librerie popolari (DRF, Celery, Channels) con Django 5.2.x.

6. Consigli per una migrazione efficace Django 5.2.3

  1. Strategia “per passi”
    • Passare prima a Django 5.2.0, poi applicare progressivamente i patch 5.2.x.
    • Usare feature flags (ad es. DJANGO_PRESERVE_REQUEST) per testare redirect “preserving”.
  2. Organizzazione del progetto
    • Separare le app core da quelle di terze parti.
    • Centralizzare i settings di compatibilità (es. DATABASES, LANGUAGE_CODE).
  3. Automatizzare la transizione
    • Script SQL per verificare charset e collation nei DB.
    • Test di regressione custom per JSONField e redirect.
  4. Documentazione interna
    • Aggiornare il README con le versioni supportate e i comandi di upgrade.
    • Aggiungere note sulle nuove API (HttpResponse.text, CompositePrimaryKey).

(fonte) (fonte) (fonte) (fonte)

Innovaformazione, scuola informatica specialistica promuove la cultura dello sviluppo software consapevole ed accompagna le aziende nella formazione continua dei team di sviluppatori. Nell’offerta formativa trovate il Corso Django framework rivolto solo alle aziende.

Per leggere invece altri articoli tecnici di settore consigliamo di navigare sul nostro blog QUI.

INFO: info@innovaformazione.net – tel. 3471012275 (Dario Carrassi)

Vuoi essere ricontattato? Lasciaci il tuo numero telefonico e la tua email, ti richiameremo nelle 24h:

    Ti potrebbe interessare

    Articoli correlati