Upload
andrea-gottardi
View
300
Download
5
Embed Size (px)
DESCRIPTION
Una piccola guida su come usare Django nello sviluppo del progetto Reminiscence
Citation preview
DJANGO progetto Reminiscence
di Andrea Gottardi
Introduzione
• Breve spiegazione degli elementi principali
• Trattazione più completa sul repository del progetto (GitHub)
• http://github.com/AndreaGot/reminiscence
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
Per cominciare
• file settings.py
• file manage.py
• cartella main
file settings.py
• Impostazioni base
• Ci interessa (praticamente) solo il database
• Altre impostazioni di importanza secondaria
• Sconsigliato l’editing di questo file
file manage.py• Contiene servizi essenziali per il progetto
• Esempi di comandi:
• dbshell• runserver• shell• syncdb
python manage.py comando
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
runserver
• Con questo comando si lancia il server bsato sul nostro progetto
• una volta lanciato ci si connette digitando
• vari URL secondari a cui accedere
localhost:8000/main/
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”
shell
• Si accede a una shell iPython dove poter sperimentare le API del progetto
• utile per testare il funzionamento delle API prima di implementarle
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
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
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
shell - API
• 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 = Nome(campo1,valore1,campo2,valore2, ...)
n.save()
shell - API
• 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.campoX = valoreX
n.save()
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
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
cartella main
• file models.py
• cartella static
• cartella templates
• file urls.py
• file views.py
file models.py
• contiene classi python
• crea la struttura delle tabelle
• viene interpretato dal comando syncdb
file models.py - struttura
class Regione(models.Model):regione = models.CharField(max_length=80)def __unicode__(self):
return str(self.regione)
file models.py - struttura
• CharField è l’equivalente del tipo SQL char
• la funzione __unicode__ serve per rappresentare il dato in maniera leggibile
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
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
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
templates - tag Django
• Inserisce il valore di una variabile
• Esegue un comando python (e.g. for)
{{variabile}}
{{% comando %}}
urls.py
• contiene una serie di stringhe, ognuna delle quali conduce a una pagina
url(r'^add/', views.add, name='add'),
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
urls.py
• Le pagine vengono visualizzate secondo un processo ben preciso
• Verrà spiegato alla fine, una volta appresi tutti i componenti
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
views.py - struttura
def add(request): [...]
return render(request, 'main/aggiungi/aggiungiRicordo.html')
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
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’ %}
COME FACCIO PER..
modificare template?
• È sufficiente conoscere alcuni tag HTML
• Nelle pagine più articolate è necessario, più che il codice HTML, modificare JS e CSS
creare un URL?
• è 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)
url(r'^xxx/', views.yyy, name='zzz'),
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
creare una view?
• Se la view è chiamata da una pagina web è possibile raccogliere i dati inseriti in input
• i dati devono essere passati con metodo POST (specificato nella form HTML)
a = request.POST.get(‘nomeform’)
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
ATTENZIONE
• per rendere le pagine interattive non bastano queste informazioni
• è necessario procedere con altri metodi (JavaScript, AJAX...)