2. About
• Laureato in Ingegneria Informatica e dell'automazione
presso l'università politecnica delle Marche
• Sviluppatore software
• Appassionato di Linux e dell'open source dal 2000
Linux Day San Severino 2013
5. Python
•
•
•
•
•
•
•
Sintassi chiara e semplice
Facile da imparare
Orientato agli oggetti
Typing dinamico
Multipiattaforma
Modulare ed estendibile (C, C++, C#, Java, .Net)
Utilizzato come linguaggio di scripting
Python rilasciato da Guido van Rossum in 1991. Il linguaggio è basato
su un modello aperto e sviluppato dalla comunità e gestito dalla
fondazione no-profit Python Software Foundation.
Linux Day San Severino 2013
7. Python - Comparazione
C#
Python
using System;
namespace HelloWorld
{
class Hello
{
static void Main()
{
System.Console.WriteLine("Hello World!");
}
}
print "Hello World!"
}
Linux Day San Severino 2013
8. Python - Comparazione
C#
Python
using System;
namespace AddFunction
{
class Program
{
static void Main()
{
int a = 5;
int b = 2;
int c = Add(a, b);
System.Console.WriteLine(
"Il risultato e' {0}", c);
}
}
def Add(x, y):
result = x + y;
return result
a = 5
b = 2
c = Add(a, b)
print "Il risultato e'", c
public int Add(int x, int y)
{
int result = x + y;
return result;
}
}
Linux Day San Severino 2013
9. Web2py
Free open source full-stack framework
for rapid development of
• fast
• scalable
• secure
• portable
database-driven web-based applications.
Written and programmable in Python.
Linux Day San Severino 2013
http://www.web2py.com
10. Model - View - Controller
Model
Rappresentazione dei dati
Che dati ho a disposizione, di che tipo sono, ...
View
Presentazione dei dati
Che dati voglio che siano visualizzati e come
Controller
Logica dell'applicazione
Come processo i dati che ho a disposizione
Linux Day San Severino 2013
12. Applicazione di esempio - Blog
• Creazione di un semplice blog.
• L'applicazione deve poter visualizzare una lista di tutti i
messaggi (post).
• Cliccando sul titolo del messaggio si deve poter vedere
il post in dettaglio (titolo, testo, data di pubblicazione)
• Chi è registrato al sito può inserire un nuovo messaggio.
NOTA:
Le prossime slide non sono una lezione di informatica, ma servono
solo a dimostrare la semplicità e le potenzialità di web2py
Linux Day San Severino 2013
13. Modello - db.py
db = DAL('sqlite://storage.sqlite', pool_size=1)
from datetime import datetime
from gluon.tools import Auth
auth = Auth(db)
auth.define_tables()
db.define_table('post',
Field('title', 'string'),
Field('content', 'text'),
Field('created_at', 'datetime', default=datetime.now())
)
db.post.title.requires = IS_NOT_EMPTY()
db.post.content.requires = IS_NOT_EMPTY()
Linux Day San Severino 2013
14. Controllore - default.py
def index():
lista_post = db().select(db.post.ALL)
return dict(lista_post=lista_post)
def view():
post_id = request.args(0)
post = db(db.post.id==post_id).select(db.post.ALL).first()
return dict(post=post)
Linux Day San Severino 2013
15. Vista - default/index.html
{{extend 'layout.html'}}
{{for post in lista_post:}}
<h2>
{{=A(post['title'], _href=URL('default', 'view',
args=post['id']))}}
</h2>
<h5>
{{=post['created_at']}}
</h5>
<p>
{{=post['content']}}
</p>
<hr />
{{pass}}
Linux Day San Severino 2013
16. Vista - default/view.html
{{extend 'layout.html'}}
{{=A('Indietro', _href=URL('default', 'index'),
_class='btn')}}
<h1>
{{=post['title']}}
</h1>
<h5>
{{=post['created_at']}}
</h5>
<p>
{{=post['content']}}
</p>
Linux Day San Severino 2013
17. Vista - default/index.html - 2
{{extend 'layout.html'}}
{{if auth.is_logged_in():}}
{{=A('Nuovo', _href=URL('default', 'new'),
_class='btn')}}
{{pass}}
{{for post in lista_post:}}
<h2>
{{=A(post['title'], _href=URL('default', 'view', args=post['id']))}}
</h2>
<h5>
{{=post['created_at']}}
</h5>
<p>
{{=post['content']}}
</p>
<hr />
{{pass}}
Linux Day San Severino 2013
18. Controllore - default.py - 2
def index():
lista_post = db().select(db.post.ALL)
return dict(lista_post=lista_post)
def view():
post_id = request.args(0)
post = db(db.post.id==post_id).select(db.post.ALL).first()
return dict(post=post)
@auth.requires_login()
def new():
form = SQLFORM(db.post)
if form.process().accepted:
response.flash = 'Post inserito!'
redirect(URL('default', 'index'))
return dict(form=form)
Linux Day San Severino 2013