View
989
Download
0
Category
Preview:
DESCRIPTION
Ho incontrato django 8 mesi fa e mi ha riconciliato con la programmazione web che francamente detestavo. Ne ho apprezzato il disegno e la chiarezza. Qui presento una libreria -- jungle -- ed alcune applicazioni costruite attorno a django sostituendo il sistema di templating originario con 'mako', un sistema di templating recente di Michael Bayer autore fra l'altro di sqlalchemy. Il sistema di templating di django è forse uno degli elementi più criticati e più difesi dagli sviluppatori di django. L'idea di base è che deve restare facilmente utilizzabile da una utenza (il grafico web) che ha normalmente poca dimestichezza con la programmazione motivo per cui i tradizionali elementi di programmazione sono ridotti o mancanti. L'esperienza mia è che in molte realtà invece chi scrive le pagine è il programmatore stesso o persona che può imparare con uguale sforzo i rudimenti per potere usare dei sistemi di templating che permettono alcuni costrutti python. A questo punto si aprono molte possibilità decisamente efficaci. I template risultano molto più leggibili senza perdere in chiarezza. Particolarmente efficace è l'uso di layout simbolici per la creazione di form e tabelle. La relazione vuole presentare il lavoro fatto in Thunder Systems srl negli ultimi 8 mesi e disponibile con licenza GNU tramite lo studio di alcune piccole applicazioni costruite con questa libreria fra cui un sistema di ticketing ed un sistema di gestione orari dipendenti/cartellino/badge.
Citation preview
2. Avviso ai naviganti
3. Perch sostituire i template? Una questione di pigrizia... 4.
5. python nei template
Per il resto django splendido... 6. definizione di una form #- general data useremail first_name last_name#- bith data birth_date T=time citystate-- s=Add 7. Django in gran sintesi
Cenni su: Tralascio : 8. schema sintetico (Jacob) 9. schema essenziale GET o POST: /ticket/ticket/ (r'^ticket/ticket?$', 'ticket.views.my_view') HttpResponse urls.py views.py
10. urls.py from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^admin/', include('django.contrib.admin.urls.admin')), (r'^jobs/', include('djproject.jobs.urls')), ) Nel progetto: Nella application 11. La view
NOTA: tutta la manipolazione dei dati avviene nella view. 12. Il modello 13. modello
14. queryset
15. filter()
16. dati, validazione, html
Pensiamo ad un campo 'date' del db: 17. fields/widget
Ovvero: 18. Ancora field - widgets Impariamo dai doctests >>> w = TextInput() >>> w.render('email', '') u' >>> import datetime >>> f = DateField() >>> f.clean(datetime.date(2006, 10, 25)) datetime.date(2006, 10, 25) >>> f.clean('10/25/2006') datetime.date(2006, 10, 25) 19. Form
20. Creare la form: via Form e metaclassi >>> class Person(Form): ...first_name = CharField() ...last_name = CharField() ...birthday = DateField() Pass a dictionary to a Form's __init__(). >>> p = Person({'first_name': u'John', 'last_name': u'Lennon', 'birthday': u'1940-10-9'}) >>> p.is_bound True >>> p.errors {} >>> p.is_valid() True >>> p.errors.as_ul() u'' >>> p.errors.as_text() u'' >>> p.clean_data {'first_name': u'John', 'last_name': u'Lennon', 'birthday': datetime.date(1940, 10, 9)} >>> print p['first_name'] 21. Form 22. template L'utente${ticket.submitter}ha aperto il ticket # ${ticket.id} per il tuo progetto ' ${ticket.project.name} ':ID: ${ticket.id}Titolo: ${ticket.title} Descrizione: ${offset_txt(ticket.description)} Priorita': ${ticket.get_priority_display()} Il mail ti inviato in qualit di${title} ---------------------------------------------------------------- Puoi vedere questo ticket qui: ${"%s/ticket/ticket/%s/" % (jun.host_url(), ticket.id)} 23. sintesi del percorso con form aggiunta dati GET: /ticket/ticket/add/ urls.py view creazione formper generare html template response POST: /ticket/ticket/add/ + {'a':'b'} urls.py view creazione formper usare dati redirect response 24. Al lavoro! prepara il template!
City: {{ form.city }} {% if form.city.errors %}*** {{ form.city.errors|join:", " }}{% endif %} State: {{ form.state }} {% if form.state.errors %}*** {{ form.state.errors|join:", " }}{% endif %} o cosi: o alla jungle way...: citystate 25. concretamente city state ${forms.mako_table_data(context, layout, obj, ) } 26. basta chiacchiere! Ora vai al serverino di sviluppo emostra qualcosa dal vivo. Per chi segue da casa: http://jungle.thundersystems.it Non dimenticare i manager del modello! 27. object_list from jungle.views.fast_search import search2 filter_cnd, order_by, form =search2( request, model, order_by=order_by, **kw) if filter_cnd: queryset = queryset.filter(**filter_cnd) if order_by: queryset = queryset.order_by(order_by) hai dimenticato i manager, vero? 28. debug: pdb ieri abbiamo visto come WSGI permetta di entrare a debuggareci che succede ed intervenire. Usando il server di sviluppodi django possiamo usare pdb.set_trace() in qualunque punto edotteniamo una sessione interattiva!!! 29. test
30. considerazioni sullo sviluppo
31. Ringraziamenti
Recommended