Presentazione django reminiscence

Preview:

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