Menzioni

In questa sezione tratteremo brevemente degli argomenti che possono risultare utili e che eventualmente saranno promossi in una sezione separata.

Funzioni di aggregazione

Django permette di annotare ed aggregare valori nei QuerySet usando delle espressioni tramite i metodi annotate ed aggregate. Si consiglia la lettura della documentazione ufficiale sulle aggregazioni. Questi strumenti permettono di demandare più lavoro al database sfruttandone le funzioni più avanzate.

Query N+1

L'ORM di Django si presta al creare il problema delle query N+1, dove quando si itera sopra ad un QuerySet vengono fatte altre query per ogni occorrenza. Per sopperire a questo si possono usare rispettivamente select_related per i campi ForeignKey o OneToOneField e prefetch_related per i ManyToManyField.

Modelli astratti

Ci sono dei casi in cui potrebbe far comodo ereditare classi che estendono models.Model per riusarne i campi definiti. Django permette questo pattern impostando nella classe Meta l'attributo abstract.

Indici e vincoli

Django permette di aggiungere facilmente degli indici ai nostri campi tramite l'attributo db_index. Per avere più controllo sugli indici è possibile configurarli tramite indexes nella classe Meta. Sempre nella classe Meta si possono configurare dei vincoli sui campi tramite constraints.

Viste per gestire gli errori

Django offre per default delle viste che gestiscono i maggiori casi di errore ossia 403, 404 e 500. Le viste per gli errori 403 e 404 possono essere richiamate rispettivamente tramite le eccezioni PermissionDenied e Http404, mentre la vista per gli errori 500 viene richiamata automaticamente in caso di errori a runtime non gestiti. Si rimanda alla documentazione delle viste di errore e alla loro customizzazione.

Paginazione

Django comprende un sistema di paginazione già integrato nelle viste a classi.

Storage dei file in cloud

Esistono applicazioni di terze parti per usare sistemi di storage diversi dal filesystem locale per salvare i file caricati dagli utenti come ad esempio django-storages che permette di salvare i file su sistemi di object-storage di diversi provider.

Comandi

Possiamo estendere il nostro progetto con ulteriori comandi rispetto a quelli forniti da Django implementando delle classi come descrive la documentazione per scrivere i propri comandi.

Azioni per l'admin

Possiamo inoltre scrivere per interagire con i nostri modelli tramite l'interfaccia di admin delle azioni.

Dei casi d'uso per le azioni potrebbe essere aggiornare qualche flag od effetture qualche ricalcolo su dei modelli specifici usando le feature dell'admin come i filtri e la ricerca per aiutarci.

Tool utili allo sviluppo

Un paio di applicazioni utili in modalità sviluppo che richiedono la configurazione DEBUG, e quindi non devono essere abilitati su istanze di produzione, sono Django Debug Toolbar e Django Silk. Django Debug Toolbar offre informazioni contestuali nella visualizzazione di una pagina, mentre Django Silk salva tutte le richieste fatte e permette di ispezionarle in un secondo momento.