-
Notifications
You must be signed in to change notification settings - Fork 0
Architettura
Il funzionamento base della piattaforma può essere riassunto in esecuzione lato utente e lato server. L'esecuzione lato utente — frontend — è composto da codice JavaScript, che viene interpretato dal browser dell'utente e gira quindi localmente; il backend invece, eseguito sulla macchina che ospita il sito web, è scritto in codice Python, utilizzando Django per agevolare lo sviluppo, e si appoggia al DBMS SQLite3. Il dialogo tra client e server avviene mediante un'archittura detta appunto client-server regolata dal protocollo HTTP, utilizzando in particolare i metodi GET
e POST
a seconda della richiesta inoltrata dall'utente.
Il pattern MVC è comodo per lo sviluppo di applicazioni web che trattano numerose tecnologie (HTML, database, HTTP, sessioni...) perché permette una netta separazione tra tre entità: model, view e controller. Anche il nostro progetto si basa su tale struttura e ne riportiamo alcuni esempi:
Sono la rappresentazione degli oggetti "reali" gestiti dalla piattaforma, come Trip
, Step
e City
(rispettivamente l'entità viaggio, tratta e città) che, opportunamente collegati con chiavi esterne, rappresentano il percorso che un passeggero o un guidatore percorre. Un'altra entità è la PoolingUser
che, se utilizzata in rappresentanza di un passeggero, è in una relazione many-to-many con Step
.
La creazione e la modifica di tali entità sono gestite con l'ORM integrato in Django che funge da Façade per l'interazione con il DBMS, oltre che da "traduttore" dei risultati di query SQL in oggetti Python facilmente trattabili.
Nel gergo di Django sono chiamate "Template". Sono pagine HTML arricchite dal template engine di Django, ossia un set di funzioni interpretate dal framework volte a rendere dinamiche le pagine mostrate all'utente. Un esempio significativo è la lista dei viaggi a cui si è preso parte, diversa da persona a persona, ma sempre mostrata nella pagina all'indirizzo user/<id_utente>
.
I vari template sono composti. Ogni pagina del sito riporta un layout preciso: navbar in alto, footer nella parte bassa, e il contenuto al centro, perché il template engine permette di riutilizzare elementi comuni in tutte le pagine, senza doverle riscrivere o copiare a ogni occorrenza. Il componimento è attuato o richiamando uno specifico "pezzo" di sito, ad esempio la login_form
, oppure ereditando un template base, nel nostro caso base_page
.
Nel gergo di Django sono chiamati "View". Sono il collante tra le viste e i modelli e nel nostro caso abbiamo una corrispondenza 1:1 tra controller e pagina web, in modo tale da avere ben strutturato il codice di backend in caso di modifiche o aggiunte di nuove funzioni. Sono il collante perché recuperano le informazioni che successivamente saranno trasferite al template engine, come i dati di un utente, il costo per partecipare a un viaggio o anche un errore di validazione.
Abbiamo posto particolare attenzione alle modifiche al database facendo in modo che siano atomiche, garantendo perciò che le informazioni inserire non vengano salvate solo in parte.