2. Introduzione
• Breve spiegazione degli elementi principali
• Trattazione più completa sul repository del
progetto (GitHub)
• http://github.com/AndreaGot/reminiscence
3. Introduzione
• La base di Django sono i progetti (projects)
• All’interno di essi trovano spazio le applicazioni
(apps), che contengono le funzionalità
• Un progetto può avere tante apps
4. Per cominciare
• file settings.py
• file manage.py
• cartella main
5. file settings.py
• Impostazioni base
• Ci interessa (praticamente) solo il database
• Altre impostazioni di importanza secondaria
• Sconsigliato l’editing di questo file
6. file manage.py
• Contiene servizi essenziali per il progetto
python manage.py comando
• Esempi di comandi:
• dbshell
• runserver
• shell
• syncdb
7. dbshell
• Si accede a una shell sqlite3 per inserire query
SQL direttamente nel database
• Importante conoscere bene la struttura delle
tabelle
• consigliato l’utilizzo di un editor visuale, oppure
del comando shell
8. runserver
• Con questo comando si lancia il server bsato sul
nostro progetto
• una volta lanciato ci si connette digitando
localhost:8000/main/
• vari URL secondari a cui accedere
9. runserver - URL
• localhost:8000/main/ - home page
• localhost:8000/main/account - creazione
• localhost:8000/main/login - login
• localhost:8000/main/add - aggiunta ricordo
• ce ne sono altri, ma sono “di servizio”
10. shell
• Si accede a una shell iPython dove poter
sperimentare le API del progetto
• utile per testare il funzionamento delle API prima
di implementarle
11. shell - API
• Servono per poter operare con le tabelle del
database senza scrivere nemmeno una riga di SQL
• Funzionano dopo opportuno import della tabella
prescelta:
from reminiscence.main.models import Nome
12. shell - API
Nome.objects.get(cond)
•Consente di prelevare dalla tabella Nome il record
corrispondente alla condizione
•Questa API prevede il ritorno di un solo record (usare
condizioni univoche)
•Per evitare l’errore da record non trovato serve una
funzione specifica
13. shell - API
Nome.objects.filter(cond)
•Consente di prelevare dalla tabella Nome una lista
di record corrispondenti alla condizione
•Per evitare l’errore da record non trovato serve una
funzione specifica
14. shell - API
n = Nome(campo1,valore1,campo2,valore2, ...)
• crea un’istanza di un record della tabella
• sono obbligatori solo i collegamenti alle FK
• il record NON è ancora salvato. Per farlo bisogna
eseguire il seguente comando:
n.save()
15. shell - API
n.campoX = valoreX
• siccome n è un’istanza, la si può modificare come
un qualsiasi oggetto
• buona norma salvare l’istanza creata prima, poi in
caso modificare i dati in questo modo. Non
dimenticate di salvare i dati con:
n.save()
16. syncdb
• comando già eseguito in sede di creazione
• salva le tabelle sul database
• prende le classi del file models.py (che vedremo
dopo) e le converte in tabelle
17. cartella main
• L’applicazione reminiscence vera e propria
• Il progetto ha le impostazioni “generali”,
l’applicazione ha le caratteristiche specifiche
• i file modificabili si trovano qui
19. file models.py
• contiene classi python
• crea la struttura delle tabelle
• viene interpretato dal comando syncdb
20. file models.py -
struttura
class Regione(models.Model):
regione = models.CharField(max_length=80)
def __unicode__(self):
return str(self.regione)
21. file models.py -
struttura
• CharField è l’equivalente del tipo SQL char
• la funzione __unicode__ serve per
rappresentare il dato in maniera leggibile
22. cartella static
• contiene, come dice il nome, file statici
• contiene file che concorrono a creare i
templates
• in generale vengono inseriti qui file css e js
23. cartella templates
• contiene solo pagine HTML
• queste pagine formeranno le pagine web che
visualizzeremo
• il template NON è la pagina web che il
browser fa vedere
24. templates - struttura
• I template sono scritti in HTML
• eventuali script e fogli di stile sono in static
• vengono resi dinamici tramite l’inserimento di
opportuni tag
25. templates - tag Django
{{variabile}}
• Inserisce il valore di una variabile
{{% comando %}}
• Esegue un comando python (e.g. for)
26. urls.py
• contiene una serie di stringhe, ognuna delle
quali conduce a una pagina
url(r'^add/', views.add, name='add'),
27. urls.py - struttura
• r’^add/’ e l’indirizzo a cui si troverà la pagina
• views.add è il nome della view da chiamare
• name è il nome a cui riferirsi nel codice
28. urls.py
• Le pagine vengono visualizzate secondo un
processo ben preciso
• Verrà spiegato alla fine, una volta appresi tutti i
componenti
29. views.py
• Contiene funzioni python
• a metà strada tra URLs e templates
• Una view viene chiamata da un url
• in quanto funzione, può essere solo ausiliaria
30. views.py - struttura
ef add(request):
[...]
return render(request, 'main/aggiungi/aggiungiRicordo.html')
31. views.py - struttura
• request è un dizionario di valori che la
chiamante passa alla view
• render è una funzione che trasforma il
template in pagina statica
• i tag citati prima vengono tradotti in HTML
32. rendering
• Utente (o form HTML) chiama URL
• URL chiama view
• view effettua il render del template
• per questo <a href [...]> non funziona
• utilizzare {% url ‘main:NomeUrl’ %}
34. modificare template?
• È sufficiente conoscere alcuni tag HTML
• Nelle pagine più articolate è necessario, più
che il codice HTML, modificare JS e CSS
35. creare un URL?
url(r'^xxx/', views.yyy, name='zzz'),
• è sufficiente inserire nel file urls.py una riga
aggiuntiva con la stringa qui sopra
• xxx e zzz devono essere univoci
• yyy deve esistere (altrimenti l’url non va)
36. creare una view?
• basta aggiungere una funzione python nel file
views.py
• la funzione può fare qualsiasi cosa
• usare print solo per debug
• si possono usare le API, con alcune aggiunte
37. creare una view?
• Se la view è chiamata da una pagina web è
possibile raccogliere i dati inseriti in input
a = request.POST.get(‘nomeform’)
• i dati devono essere passati con metodo POST
(specificato nella form HTML)
38. creare una view?
• La view deve concludersi sempre con il ritorno
della render
• ovviamente deve esistere il template al quale la
view si riferisce
• Le view sono solo le funzioni che ritornano
pagine web
39. ATTENZIONE
• per rendere le pagine interattive non bastano
queste informazioni
• è necessario procedere con altri metodi
(JavaScript, AJAX...)