Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DevFever - progetto Reminiscence - DJANGO

DevFever - progetto Reminiscence - DJANGO

Una breve introduzione a Django e al lato server del progetto Reminiscence - Gruppo DevFever - Università degli Studi di Trento

Andrea Gottardi

April 13, 2013
Tweet

More Decks by Andrea Gottardi

Other Decks in How-to & DIY

Transcript

  1. Introduzione • Breve spiegazione degli elementi principali • Trattazione più

    completa sul repository del progetto (GitHub) • http://github.com/AndreaGot/reminiscence
  2. 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
  3. file settings.py • Impostazioni base • Ci interessa (praticamente) solo

    il database • Altre impostazioni di importanza secondaria • Sconsigliato l’editing di questo file
  4. file manage.py • Contiene servizi essenziali per il progetto •

    Esempi di comandi: • dbshell • runserver • shell • syncdb python manage.py comando
  5. 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
  6. 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/
  7. 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”
  8. shell • Si accede a una shell iPython dove poter

    sperimentare le API del progetto • utile per testare il funzionamento delle API prima di implementarle
  9. 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
  10. shell - API • 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 Nome.objects.get(cond)
  11. shell - API • 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 Nome.objects.filter(cond)
  12. 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()
  13. 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()
  14. 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
  15. 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
  16. cartella main • file models.py • cartella static • cartella

    templates • file urls.py • file views.py
  17. file models.py • contiene classi python • crea la struttura

    delle tabelle • viene interpretato dal comando syncdb
  18. file models.py - struttura • CharField è l’equivalente del tipo

    SQL char • la funzione __unicode__ serve per rappresentare il dato in maniera leggibile
  19. 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
  20. 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
  21. 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
  22. templates - tag Django • Inserisce il valore di una

    variabile • Esegue un comando python (e.g. for) {{variabile}} {{% comando %}}
  23. urls.py • contiene una serie di stringhe, ognuna delle quali

    conduce a una pagina url(r'^add/', views.add, name='add'),
  24. 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
  25. urls.py • Le pagine vengono visualizzate secondo un processo ben

    preciso • Verrà spiegato alla fine, una volta appresi tutti i componenti
  26. 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
  27. 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
  28. 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’ %}
  29. modificare template? • È sufficiente conoscere alcuni tag HTML •

    Nelle pagine più articolate è necessario, più che il codice HTML, modificare JS e CSS
  30. 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'),
  31. 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
  32. 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) • ci si riferisce all’attributo “name” del tag HTML a = request.POST.get(‘nomeform’)
  33. 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
  34. ATTENZIONE • per rendere le pagine interattive non bastano queste

    informazioni • è necessario procedere con altri metodi (JavaScript, AJAX...)
  35. Proviamo • Crea un semplice template con due caselle di

    testo • Crea un template “di output” • Crea una view che prende in input il valore delle caselle di testo e le visualizza sul template output • Crea un URL che collega insieme questi elementi • Testa il risultato!