SlideShare una empresa de Scribd 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

Más contenido relacionado

Similar a GAE python GDG Milano - L02

Corso Java - Introduzione
Corso Java - IntroduzioneCorso Java - Introduzione
Corso Java - Introduzione
Campus La Camilla - Scuola di maker
 
Fare pipì controvento
Fare pipì controventoFare pipì controvento
Fare pipì controvento
Alberto Brandolini
 
Ascoltere la rete: la sentiment analysis
Ascoltere la rete: la sentiment analysisAscoltere la rete: la sentiment analysis
Ascoltere la rete: la sentiment analysis
Center for Generative Communication
 
Drupal Day 2011 - Drupal per la ricerca, il caso EAI
Drupal Day 2011 - Drupal per la ricerca, il caso EAIDrupal Day 2011 - Drupal per la ricerca, il caso EAI
Drupal Day 2011 - Drupal per la ricerca, il caso EAI
DrupalDay
 
Come realizzare una distribuzione Linux per innovare e trovare lavoro
Come realizzare una distribuzione Linux per innovare e trovare lavoroCome realizzare una distribuzione Linux per innovare e trovare lavoro
Come realizzare una distribuzione Linux per innovare e trovare lavoro
Alessio Fattorini
 
Una fugace occhiata al Test Driven Development (2006)
Una fugace occhiata al Test Driven Development  (2006)Una fugace occhiata al Test Driven Development  (2006)
Una fugace occhiata al Test Driven Development (2006)
Roberto Bettazzoni
 
Le basi della SEO | Quando il posizionamento ha un'anima
Le basi della SEO | Quando il posizionamento ha un'animaLe basi della SEO | Quando il posizionamento ha un'anima
Le basi della SEO | Quando il posizionamento ha un'anima
Michele Franzese
 
Reshaping enterrprise software
Reshaping enterrprise softwareReshaping enterrprise software
Reshaping enterrprise software
Alberto Brandolini
 
Le 10 principali ragioni per cui Ruby fa pena
Le 10 principali ragioni per cui Ruby fa penaLe 10 principali ragioni per cui Ruby fa pena
Le 10 principali ragioni per cui Ruby fa penaAdvenias
 
Testare l'intestabile - Italian Agile Days 2019 #IAD19
Testare l'intestabile - Italian Agile Days 2019 #IAD19Testare l'intestabile - Italian Agile Days 2019 #IAD19
Testare l'intestabile - Italian Agile Days 2019 #IAD19
Ferdinando Santacroce
 
User Stories - Andrea Francia @ WeDev 7 novembre 2018
User Stories - Andrea Francia @ WeDev 7 novembre 2018User Stories - Andrea Francia @ WeDev 7 novembre 2018
User Stories - Andrea Francia @ WeDev 7 novembre 2018
Andrea Francia
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del Testing
Marco Breveglieri
 
ios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaDario Rusignuolo
 
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Un viaggio alla scoperta dei Language Models e dell’intelligenza artificiale ...
Commit University
 
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Marco Breveglieri
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
Edmondo Porcu
 
Software ...e tutto ciò che comporta
Software ...e tutto ciò che comportaSoftware ...e tutto ciò che comporta
Software ...e tutto ciò che comporta
Alberto Brandolini
 
"Configuration Manager: il ruolo nel ciclo di vita del software" by Omar Rossini
"Configuration Manager: il ruolo nel ciclo di vita del software" by Omar Rossini"Configuration Manager: il ruolo nel ciclo di vita del software" by Omar Rossini
"Configuration Manager: il ruolo nel ciclo di vita del software" by Omar Rossini
ThinkOpen
 
Web usability - 1 | WebMaster & WebDesigner
Web usability - 1 | WebMaster & WebDesignerWeb usability - 1 | WebMaster & WebDesigner
Web usability - 1 | WebMaster & WebDesigner
Matteo Magni
 

Similar a GAE python GDG Milano - L02 (20)

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

Más de Paolo Dadda

SMAU Milano 2016
SMAU Milano 2016SMAU Milano 2016
SMAU Milano 2016
Paolo Dadda
 
SMAU Milano 2015
SMAU Milano 2015SMAU Milano 2015
SMAU Milano 2015
Paolo Dadda
 
GAE python GDG Milano L06
GAE python GDG Milano L06GAE python GDG Milano L06
GAE python GDG Milano L06
Paolo Dadda
 
Gae python GDG Milano L05
Gae python GDG Milano L05Gae python GDG Milano L05
Gae python GDG Milano L05
Paolo Dadda
 
GAE python GDG Milano L04
GAE python GDG Milano L04GAE python GDG Milano L04
GAE python GDG Milano L04
Paolo Dadda
 
Gae python gdg milano L03
Gae python gdg milano L03Gae python gdg milano L03
Gae python gdg milano L03
Paolo Dadda
 
GAE python GDG Milano - L01
GAE python GDG Milano - L01GAE python GDG Milano - L01
GAE python GDG Milano - L01
Paolo Dadda
 
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
SMAU Milano 2014 GAE 24/10/2014 - IWA ItalySMAU Milano 2014 GAE 24/10/2014 - IWA Italy
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
Paolo Dadda
 
SMAU Firenze 2014 - Siti ed Applicazioni Web nel Cloud: piccoli team e svilup...
SMAU Firenze 2014 - Siti ed Applicazioni Web nel Cloud: piccoli team e svilup...SMAU Firenze 2014 - Siti ed Applicazioni Web nel Cloud: piccoli team e svilup...
SMAU Firenze 2014 - Siti ed Applicazioni Web nel Cloud: piccoli team e svilup...
Paolo Dadda
 

Más de Paolo Dadda (9)

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

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? ?? ?