Django, il noto web framework che utilizza Python quale linguaggio di sviluppo, è oggi disponibile nella release 2.x. Non si tratta ancora di una versione LTS, prevista invece per il 2019 con l'aggiornamento 2.2, tuttavia le modifiche introdotte sono decisamente sostanziali. Si può notare immediatamente la spinta verso l'innovazione voluta dagli sviluppatori stessi che hanno deciso di abbandonare il supporto a Python 2.7 aprendo invece alla compatibilità con Python 3.4 e rilasci successivi.
Tra le major feature introdotte, la più importante risulta essere sicuramente l'introduzione di una sintassi semplificata per la specificazione degli URL. Fino alla versione 1.11, gli URL erano fondamentalmente composti da espressioni regolari, una seccatura non da poco per i developer. D'ora in poi invece sarà possibile specificare il tipo di ciascun elemento del path, tecnicamente detto type coercion, lasciando a Django l'onere di tradurre l'URL in un espressione regolare.
Volendosi rifare ad un esempio pratico: supponiamo di volere specificare un URL che elenchi tutti gli articoli di un blog, per un determinato anno: "/articoli/anno/". Con Django 1.11 avremmo dichiarato l'URL con l'espressione regolare seguente:
url(r'^articoli/(?P<anno>[0-9]{4})/$', views.archivio)
mentre adesso sarà sufficiente la sintassi:
path('articoli/<int:anno>/', views.archivio)
Tra i tipi messi a disposizione da Django per la specificazione degli URL troveremo (oltre gli interi):
- slug: effettua un match con stringhe di tipo slug (caratteri ASCII), inclusi i caratteri underscore ("_") e meno ("-");
- uuid: effettua un match con il formato UUID (le lettere vanno specificate in minuscolo);
- str: effettua un match con qualunque stringa che non includa il training slash "/";
Un'altra importante modifica riguarda l'interfaccia amministrativa, ossia i moduli contenuti in contrib.admin, che sarà resa fruibile anche ai browser dei dispositivi mobili, quali Opera mini, Safari e quant'altro.
Infine, la nuova classe Window implementerà la clausola SQL OVER che consentirà di applicare un'operazione specifica su determinate partizioni delle tabelle.
Per quanto riguarda gli aggiornamenti minori, sicuramente sono degni di nota:
- Il metodo File.open() potrà essere utilizzato come context manager: with file.open() as f.
- Il metodo Form.errors.get_json_data() restituirà gli errori di un form in formato dizionario convertibile rapidamente in JSON.
- L'attributo ContextMixin.extra_context consentirà di aggiungere un contesto alle viste generiche in View.as_view();.
- I metodi QuerySet.earliest(), QuerySet.latest() consentiranno di ordinare i risultati secondo più campi.
Per la lista completa delle modifiche introdotte riferitevi alla documentazione ufficiale di Django 2.0