39
DJANGO progetto Reminiscence di Andrea Gottardi

Presentazione django reminiscence

Embed Size (px)

DESCRIPTION

Una piccola guida su come usare Django nello sviluppo del progetto Reminiscence

Citation preview

Page 1: Presentazione django reminiscence

DJANGO progetto Reminiscence

di Andrea Gottardi

Page 2: Presentazione django reminiscence

Introduzione

• Breve spiegazione degli elementi principali

• Trattazione più completa sul repository del progetto (GitHub)

• http://github.com/AndreaGot/reminiscence

Page 3: Presentazione django 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

Page 4: Presentazione django reminiscence

Per cominciare

• file settings.py

• file manage.py

• cartella main

Page 5: Presentazione django reminiscence

file settings.py

• Impostazioni base

• Ci interessa (praticamente) solo il database

• Altre impostazioni di importanza secondaria

• Sconsigliato l’editing di questo file

Page 6: Presentazione django reminiscence

file manage.py• Contiene servizi essenziali per il progetto

• Esempi di comandi:

• dbshell• runserver• shell• syncdb

python manage.py comando

Page 7: Presentazione django reminiscence

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

Page 8: Presentazione django reminiscence

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/

Page 9: Presentazione django reminiscence

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”

Page 10: Presentazione django reminiscence

shell

• Si accede a una shell iPython dove poter sperimentare le API del progetto

• utile per testare il funzionamento delle API prima di implementarle

Page 11: Presentazione django reminiscence

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

Page 12: Presentazione django reminiscence

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

Page 13: Presentazione django reminiscence

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

Page 14: Presentazione django reminiscence

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()

Page 15: Presentazione django reminiscence

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()

Page 16: Presentazione django reminiscence

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

Page 17: Presentazione django reminiscence

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

Page 18: Presentazione django reminiscence

cartella main

• file models.py

• cartella static

• cartella templates

• file urls.py

• file views.py

Page 19: Presentazione django reminiscence

file models.py

• contiene classi python

• crea la struttura delle tabelle

• viene interpretato dal comando syncdb

Page 20: Presentazione django reminiscence

file models.py - struttura

class Regione(models.Model):regione = models.CharField(max_length=80)def __unicode__(self):

return str(self.regione)

Page 21: Presentazione django reminiscence

file models.py - struttura

• CharField è l’equivalente del tipo SQL char

• la funzione __unicode__ serve per rappresentare il dato in maniera leggibile

Page 22: Presentazione django reminiscence

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

Page 23: Presentazione django reminiscence

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

Page 24: Presentazione django reminiscence

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

Page 25: Presentazione django reminiscence

templates - tag Django

• Inserisce il valore di una variabile

• Esegue un comando python (e.g. for)

{{variabile}}

{{% comando %}}

Page 26: Presentazione django reminiscence

urls.py

• contiene una serie di stringhe, ognuna delle quali conduce a una pagina

url(r'^add/', views.add, name='add'),

Page 27: Presentazione django reminiscence

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

Page 28: Presentazione django reminiscence

urls.py

• Le pagine vengono visualizzate secondo un processo ben preciso

• Verrà spiegato alla fine, una volta appresi tutti i componenti

Page 29: Presentazione django reminiscence

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

Page 30: Presentazione django reminiscence

views.py - struttura

def add(request): [...]

return render(request, 'main/aggiungi/aggiungiRicordo.html')

Page 31: Presentazione django reminiscence

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

Page 32: Presentazione django reminiscence

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’ %}

Page 33: Presentazione django reminiscence

COME FACCIO PER..

Page 34: Presentazione django reminiscence

modificare template?

• È sufficiente conoscere alcuni tag HTML

• Nelle pagine più articolate è necessario, più che il codice HTML, modificare JS e CSS

Page 35: Presentazione django reminiscence

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'),

Page 36: Presentazione django reminiscence

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

Page 37: Presentazione django reminiscence

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’)

Page 38: Presentazione django reminiscence

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

Page 39: Presentazione django reminiscence

ATTENZIONE

• per rendere le pagine interattive non bastano queste informazioni

• è necessario procedere con altri metodi (JavaScript, AJAX...)