SlideShare a Scribd company logo
App Engine Take Off
Marzo 2015
Python
Il framework: webapp2
GDG Milano - Paolo Dadda - 2DWeb
Milano, 26 marzo 2015
@TalentGarden, Via Merano, 16
#gae #gdgmilano
Marzo 2015
Google App Engine
Python
Il framework: webapp2
#gae #gdgmilano
Paolo Dadda
Membro IWA ITALY nr. 0307429
Professionista Web ai sensi della Legge 4/2013
Contatti:

Tel.: 393.4298004
Ufficio: Via 4 Novembre, 94 Cislago (VA)
WebSite: www.2dweb.it
Mail: info@2dweb.it
Cosa vedremo oggi?
- Un sito di esempio (una base)

- Organizzazione del codice

- Il framework Webapp2

- CodeLab !

Verrà inoltre rilasciato il codice per
“essere sempre tutti allo stesso punto”
Piano delle lezioni
Lezione 1 (Febbraio 2015)
Introduzione
Lezione 2 (Marzo 2015)
WebApp2 & Basi per uso di Model, Template, Handler
Lezione 3 (Aprile 2015)
Handler, Mail, Get, Post, Upload
Lezione 4 (Maggio 2015)
Model, Memcache
Lezione 5 (Giugno 2015)
Template, Jinja2, Exception
Lezione 6 (Luglio 2015)
Blobstore & Google Cloud Storage
Cosa succede se “prendete in mano”
un codice scritto da voi tempo fa?
Se la sensazione

è questa…
…parliamone !
Python, il codice, ed un certo ordine
• Scrivere e tenere i file di progetto ordinati è importante
• Un ordine logico può aiutarci a sistemare un problema o
modificare una parte di codice anche a distanza di tempo
• Un codice ordinato è più veloce da mantenere, da scrivere,
da gestire e da guardare, sia per noi che per gli altri.
• Nota: Ottimizzare non significa necessariamente scrivere meno righe di codice
Lo Zen di Python
No, non sto scherzando…

esiste! 

potete provarlo anche da soli:

da terminale:

python

>>> import this
Lo Zen di Python
• Beautiful is better than ugly 

(Bello è meglio di brutto)

• Explicit is better than implicit 

(Esplicito è meglio di implicito)

• Simple is better than complex. 

Complex is better than complicated 

(Semplice è meglio di complesso. 

Complesso è migliore di complicato)

• Flat is better than nested 

(Meglio piatto di innestato)

• Sparse is better than dense 

(Sparso è meglio di denso)

• Readability counts 

(La leggibilità conta)

• Special cases aren’t special enough to break the rules
although practicality beats purity 

(I casi speciali non sono abbastanza speciali 

da infrangere le regole anche se la praticitità sconfigge la
purezza

• Errors should never pass silently. 

Unless explicitly silenced 

(Gli errori non devono mai essere ignorati, 

a meno che non siano da ignorare esplicitamente)
Lo Zen di Python
• In the face of ambiguity, 

refuse the temptation to guess 

(Di fronte all’ambiguità, 

fuggi la tentazione di indovinare)

• There should be one and preferably only one obvious way
to do it. Although that way may not be obvious at first
unless you’re Dutch 

(Ci dovrebbe essere uno e preferibilmente un solo ovvio
modo per farlo. Anche se quel modo potrebbe non essere
ovvio a prima vista a meno che tu non sia olandese)

• Now is better than never. 

Although never is often better than *right* now 

(Ora è meglio di mai. 

Anche se “mai” è spesso *meglio* di subito)

• If the implementation is hard to explain, it’s a bad idea. If
the implementation is easy to explain, it may be a good
idea. 

(Se l’implementazione è difficile da spiegare, è una cattiva
idea. Se è facile da spiegare, potrebbe essere una buona
idea)

• Namespaces are one honking great idea,

let’s do more of those! 

(I namespaces sono una buona idea, 

creiamone di più!)
La nostra struttura
• I file statici sono tutti in un’unica
cartella.

• I template, sono divisi 

dal resto del progetto.

• le librerie esterne sono 

raccolte in un unico posto.

• i file di progetto hanno un 

senso ed un nome comune

ai progetti che verranno creati.

• Questa “standardizzazione” 

non è d’obbligo, ma può
semplificare il nostro modo di
programmare ed imparare.
Il framework: Webapp2
https://webapp-improved.appspot.com/
Webapp2 - Quickstart https://webapp-improved.appspot.com/tutorials/quickstart.html
• Dal sito ufficiale:
Webapp2 - La nostra struttura
• “Complichiamo per semplificare”:
Webapp2 - app.yaml
Nome dell’applicazione creata su
cloud.google.com
Attenzione: l’ordine è importante!
Possono essere “serviti”:
sia singoli file statici
sia intere directory con il loro contenuto
ed ovviamente eseguiti script con codice
Importazione di
librerie e funzionalità di sistema
già integrate in App Engine
Webapp2 - urls.py & handlers.py
Route
Handlers
Webapp2 - Jinja2 ed i template
Sito ufficiale: http://jinja.pocoo.org/
Nel nostro caso:
Risorse e codice:
Webapp2 sito ufficiale:

https://webapp-improved.appspot.com/

Documentazione Jinja2:

http://jinja.pocoo.org/docs/dev/

File e base per siti web App Engine

https://bitbucket.org/duedweb/base-gae-python

Domande?
?? ?
Pausa Caffè,
poi CodeLab! 5 minuti

More Related Content

PPTX
Dermik
PDF
Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...
PPTX
Inversion of Control @ CD2008
PDF
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
PPTX
Francesco Malatesta - What You Give is What You Get - Codemotion Milan 2017
PPT
Loosely Coupled Complexity - Unleash the power of your domain model
PPTX
Test Driven Development @ Xe.Net
PPTX
Python <3 Azure
Dermik
Breaking the ice with agile - cinque strade per rompere il ghiaccio e introdu...
Inversion of Control @ CD2008
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
Francesco Malatesta - What You Give is What You Get - Codemotion Milan 2017
Loosely Coupled Complexity - Unleash the power of your domain model
Test Driven Development @ Xe.Net
Python <3 Azure

Similar to GAE python GDG Milano - L02 (20)

PDF
Corso Java - Introduzione
KEY
Fare pipì controvento
PDF
Ascoltere la rete: la sentiment analysis
KEY
Drupal Day 2011 - Drupal per la ricerca, il caso EAI
PDF
07 Design Patterns
PDF
Come realizzare una distribuzione Linux per innovare e trovare lavoro
PDF
Una fugace occhiata al Test Driven Development (2006)
PDF
Le basi della SEO | Quando il posizionamento ha un'anima
PDF
Reshaping enterrprise software
ODP
Le 10 principali ragioni per cui Ruby fa pena
PPTX
Testare l'intestabile - Italian Agile Days 2019 #IAD19
PDF
User Stories - Andrea Francia @ WeDev 7 novembre 2018
PDF
Delphi & Dintorni Webinar - Diventa un mago del Testing
PPTX
ios 8 - parte 1 - intro - ita
PPTX
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
PDF
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
PPTX
Scala: come recuperare la programmazione funzionale e perché
KEY
Software ...e tutto ciò che comporta
PDF
"Configuration Manager: il ruolo nel ciclo di vita del software" by Omar Rossini
PDF
Web usability - 1 | WebMaster & WebDesigner
Corso Java - Introduzione
Fare pipì controvento
Ascoltere la rete: la sentiment analysis
Drupal Day 2011 - Drupal per la ricerca, il caso EAI
07 Design Patterns
Come realizzare una distribuzione Linux per innovare e trovare lavoro
Una fugace occhiata al Test Driven Development (2006)
Le basi della SEO | Quando il posizionamento ha un'anima
Reshaping enterrprise software
Le 10 principali ragioni per cui Ruby fa pena
Testare l'intestabile - Italian Agile Days 2019 #IAD19
User Stories - Andrea Francia @ WeDev 7 novembre 2018
Delphi & Dintorni Webinar - Diventa un mago del Testing
ios 8 - parte 1 - intro - ita
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Scala: come recuperare la programmazione funzionale e perché
Software ...e tutto ciò che comporta
"Configuration Manager: il ruolo nel ciclo di vita del software" by Omar Rossini
Web usability - 1 | WebMaster & WebDesigner
Ad

More from Paolo Dadda (9)

PDF
SMAU Milano 2016
PDF
SMAU Milano 2015
PDF
GAE python GDG Milano L06
PDF
Gae python GDG Milano L05
PDF
GAE python GDG Milano L04
PDF
Gae python gdg milano L03
PDF
GAE python GDG Milano - L01
PDF
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
PDF
SMAU Firenze 2014 - Siti ed Applicazioni Web nel Cloud: piccoli team e svilup...
SMAU Milano 2016
SMAU Milano 2015
GAE python GDG Milano L06
Gae python GDG Milano L05
GAE python GDG Milano L04
Gae python gdg milano L03
GAE python GDG Milano - L01
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
SMAU Firenze 2014 - Siti ed Applicazioni Web nel Cloud: piccoli team e svilup...
Ad

GAE python GDG Milano - L02

  • 1. App Engine Take Off Marzo 2015 Python Il framework: webapp2 GDG Milano - Paolo Dadda - 2DWeb Milano, 26 marzo 2015 @TalentGarden, Via Merano, 16 #gae #gdgmilano
  • 2. Marzo 2015 Google App Engine Python Il framework: webapp2 #gae #gdgmilano Paolo Dadda Membro IWA ITALY nr. 0307429 Professionista Web ai sensi della Legge 4/2013 Contatti:
 Tel.: 393.4298004 Ufficio: Via 4 Novembre, 94 Cislago (VA) WebSite: www.2dweb.it Mail: info@2dweb.it
  • 3. Cosa vedremo oggi? - Un sito di esempio (una base) - Organizzazione del codice - Il framework Webapp2 - CodeLab ! Verrà inoltre rilasciato il codice per “essere sempre tutti allo stesso punto” Piano delle lezioni Lezione 1 (Febbraio 2015) Introduzione Lezione 2 (Marzo 2015) WebApp2 & Basi per uso di Model, Template, Handler Lezione 3 (Aprile 2015) Handler, Mail, Get, Post, Upload Lezione 4 (Maggio 2015) Model, Memcache Lezione 5 (Giugno 2015) Template, Jinja2, Exception Lezione 6 (Luglio 2015) Blobstore & Google Cloud Storage
  • 4. Cosa succede se “prendete in mano” un codice scritto da voi tempo fa?
  • 5. Se la sensazione
 è questa… …parliamone !
  • 6. Python, il codice, ed un certo ordine • Scrivere e tenere i file di progetto ordinati è importante • Un ordine logico può aiutarci a sistemare un problema o modificare una parte di codice anche a distanza di tempo • Un codice ordinato è più veloce da mantenere, da scrivere, da gestire e da guardare, sia per noi che per gli altri. • Nota: Ottimizzare non significa necessariamente scrivere meno righe di codice
  • 7. Lo Zen di Python No, non sto scherzando… esiste! 
 potete provarlo anche da soli: da terminale: python >>> import this
  • 8. Lo Zen di Python • Beautiful is better than ugly 
 (Bello è meglio di brutto) • Explicit is better than implicit 
 (Esplicito è meglio di implicito) • Simple is better than complex. 
 Complex is better than complicated 
 (Semplice è meglio di complesso. 
 Complesso è migliore di complicato) • Flat is better than nested 
 (Meglio piatto di innestato) • Sparse is better than dense 
 (Sparso è meglio di denso) • Readability counts 
 (La leggibilità conta) • Special cases aren’t special enough to break the rules although practicality beats purity 
 (I casi speciali non sono abbastanza speciali 
 da infrangere le regole anche se la praticitità sconfigge la purezza • Errors should never pass silently. 
 Unless explicitly silenced 
 (Gli errori non devono mai essere ignorati, 
 a meno che non siano da ignorare esplicitamente)
  • 9. Lo Zen di Python • In the face of ambiguity, 
 refuse the temptation to guess 
 (Di fronte all’ambiguità, 
 fuggi la tentazione di indovinare) • There should be one and preferably only one obvious way to do it. Although that way may not be obvious at first unless you’re Dutch 
 (Ci dovrebbe essere uno e preferibilmente un solo ovvio modo per farlo. Anche se quel modo potrebbe non essere ovvio a prima vista a meno che tu non sia olandese) • Now is better than never. 
 Although never is often better than *right* now 
 (Ora è meglio di mai. 
 Anche se “mai” è spesso *meglio* di subito) • If the implementation is hard to explain, it’s a bad idea. If the implementation is easy to explain, it may be a good idea. 
 (Se l’implementazione è difficile da spiegare, è una cattiva idea. Se è facile da spiegare, potrebbe essere una buona idea) • Namespaces are one honking great idea,
 let’s do more of those! 
 (I namespaces sono una buona idea, 
 creiamone di più!)
  • 10. La nostra struttura • I file statici sono tutti in un’unica cartella. • I template, sono divisi 
 dal resto del progetto. • le librerie esterne sono 
 raccolte in un unico posto. • i file di progetto hanno un 
 senso ed un nome comune
 ai progetti che verranno creati. • Questa “standardizzazione” 
 non è d’obbligo, ma può semplificare il nostro modo di programmare ed imparare.
  • 12. Webapp2 - Quickstart https://webapp-improved.appspot.com/tutorials/quickstart.html • Dal sito ufficiale:
  • 13. Webapp2 - La nostra struttura • “Complichiamo per semplificare”:
  • 14. Webapp2 - app.yaml Nome dell’applicazione creata su cloud.google.com Attenzione: l’ordine è importante! Possono essere “serviti”: sia singoli file statici sia intere directory con il loro contenuto ed ovviamente eseguiti script con codice Importazione di librerie e funzionalità di sistema già integrate in App Engine
  • 15. Webapp2 - urls.py & handlers.py Route Handlers
  • 16. Webapp2 - Jinja2 ed i template Sito ufficiale: http://jinja.pocoo.org/ Nel nostro caso:
  • 17. Risorse e codice: Webapp2 sito ufficiale: https://webapp-improved.appspot.com/ Documentazione Jinja2: http://jinja.pocoo.org/docs/dev/ File e base per siti web App Engine https://bitbucket.org/duedweb/base-gae-python Domande? ?? ?