PDA

View Full Version : [Python] Sviluppo web e framework


kwb
21-04-2013, 14:52
Sarei interessato a studiare un po' di python nell'ambito web ( conosco già un po' di python ) e mi stavo chiedendo come iniziare.
Ho sentito che ci sono parecchi framework, forse il più famoso è Django.
Tuttavia non avendo esperienza in merito, vorrei un'opinione da chi se ne intende.

Ho trovato in giro parecchie persone che dicono che se non si conosce PHP e si vuole iniziare a fare un po' di programmazione web, meglio lasciarlo perdere perchè ora come ora ci sono linguaggi molto più coerenti e ordinati per lo sviluppo web.

Che mi dite?

nico159
21-04-2013, 18:44
Python è forse il migliore linguaggio di scripting, con una collezione di librerie (anche a fini web) che non ha niente da invidiare a php

Django è il più famoso ma è un "all inclusive", io preferisco soluzioni minimali come Flask

pequeno
21-04-2013, 20:24
Probabilmente Django per iniziare non è il massimo, semplicemente perché ha troppa roba, anche se in effetti è molto completo.
Se devi realizzare applicazioni non troppo complesse o vuoi iniziare a fare delle prove, meglio un framework tipo Flask o CherryPy.
A questi puoi associare un template engine tipo Wheezy.template o Tenjin.

GByTe87
21-04-2013, 20:55
Confermo; Django è sicuramente il più famoso, ma ce ne sono davvero un'infinità.
Io ho avuto modo di giocare con Bottle (poco) e Flask (parecchio, ultimamente), e pur essendo una capra ignorante in quanto a sviluppo web son riuscito a tirarci fuori cose carine. :D

Per Flask, prova a dare un occhio a questa serie di articoli (http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world).

kwb
21-04-2013, 22:59
Grazie a tutti.
Avevo sentito anche di Flask ( e recentemente letto di Bottle ).
In realtà mi ero documentato solo su Django perchè ho sentito che viene moltissimo utilizzato.

Effettivamente, per ciò che intendo fare ( giocarci essenzialmente ), non ho bisogno di framework imponenti e completissimi.

Non mi è molto chiaro il concetto di web template engine di cui avete parlato: mi sono rapidamente documentato per vedere di cosa si tratta ed se ho ben capito stiamo parlando di frameworks per la costruzione della struttura delle pagine web.
Ok ma... Allora a cosa servono Flask, Bottle e Django ( che se non erro quest'ultimo assolve anche alla funzione di web template engine )?
Non mi basterebbe python puro per sbrogliare la parte computazionale e usare, ad esempio, Jinja per "disporre" i risultati sulla pagina?

Oppure Flask ecc... lavorano come web engines per assolvere alla funzione di CGI?

pequeno
22-04-2013, 20:24
Grazie a tutti.
Avevo sentito anche di Flask ( e recentemente letto di Bottle ).
In realtà mi ero documentato solo su Django perchè ho sentito che viene moltissimo utilizzato.

Effettivamente, per ciò che intendo fare ( giocarci essenzialmente ), non ho bisogno di framework imponenti e completissimi.

Non mi è molto chiaro il concetto di web template engine di cui avete parlato: mi sono rapidamente documentato per vedere di cosa si tratta ed se ho ben capito stiamo parlando di frameworks per la costruzione della struttura delle pagine web.
Ok ma... Allora a cosa servono Flask, Bottle e Django ( che se non erro quest'ultimo assolve anche alla funzione di web template engine )?
Non mi basterebbe python puro per sbrogliare la parte computazionale e usare, ad esempio, Jinja per "disporre" i risultati sulla pagina?

Oppure Flask ecc... lavorano come web engines per assolvere alla funzione di CGI?

Per risponderti in maniera semplice, i vari Django, Flask, etc. sono dei framework MVC che ti danno la possibilità di avere una netta distinzione tra vista, modello e controllo, di una tipica applicazione web 3-tier.
Il tutto è realizzabile anche senza framework, ma è più complesso e artigianale (il solito concetto di reinventare la ruota). Django & c. ti consentono di avere un supporto facilitato per funzionalità quali: routing, autenticazione e autorizzazione, internazionalizzazione, etc.. Django comprende anche "mini-framework" (passami l'espressione) per template engine e orm, mentre gli altri sono più light.
A volte è conveniente realizzarsi un proprio framework per questioni di leggerezza e specificità. In alcuni ambiti aziendali, alla lunga si creano dei framework, per così dire "proprietari", spesso basati su framework blasonati, di cui vengono utilizzate solo le funzionalità "core".

ingframin
22-04-2013, 21:52
Se e' solo per imparare io ti consiglio di provare web.py (http://webpy.org).
E' semplicissimo ma completo (anche di template engine) e ti fa davvero capire come funziona un'applicazione web perche' il livello di astrazione e' minimo.
Una volta che hai capito come funzionano le applicazioni web, passare ad un altro framework o linguaggio e' facilissimo.

cdimauro
23-04-2013, 08:00
Concordo. Uso web.py perché è abbastanza semplice, ma ha tutto ciò che può servire per lo sviluppo web. In realtà di tirare fuori pagine web non mi è mai interessato (ho realizzato back-end, quindi espongo delle API che fanno uso del protocollo HTTP per essere invocate), per cui non ho mai provato il template engine.

GByTe87
23-04-2013, 08:10
Gli sviluppi su web.py verranno portati avanti? Perchè vedo che il repo è abbastanza fermo (web.py era un progetto di Aaron Swartz)

cdimauro
23-04-2013, 09:29
L'ultima modifica è di 2 mesi fa, quindi dovrebbe essere ancora attivo come progetto. E non potrebbe essere altrimenti, perché è abbastanza gettonato. ;)

kwb
23-04-2013, 09:47
Per risponderti in maniera semplice, i vari Django, Flask, etc. sono dei framework MVC che ti danno la possibilità di avere una netta distinzione tra vista, modello e controllo, di una tipica applicazione web 3-tier. Quindi se anche Flask è un MVC allora funge anche da web template engine?

Django & c. ti consentono di avere un supporto facilitato per funzionalità quali: routing, autenticazione e autorizzazione, internazionalizzazione, etc..
Routing? Ma non sono cose che vengono sbrogliate direttamente dai vari livelli del modello Internet ( livello rete??? :stordita: )?

Io pensavo che linguaggi come PHP ( il più famoso in questo ambito ) fossero semplicemente per il calcolo computazionale e la generazione dinamica di contenuti :fagiano:

GByTe87
23-04-2013, 09:57
Quindi se anche Flask è un MVC allora funge anche da web template engine?

Flask usa Jinja2 come template engine.

Routing? Ma non sono cose che vengono sbrogliate direttamente dai vari livelli del modello Internet ( livello rete??? :stordita: )?

:D
Routing -> URL Routing; quindi il collegamento url -> oggetto python

kwb
23-04-2013, 10:32
:D
Routing -> URL Routing; quindi il collegamento url -> oggetto python

Ahhhhh :asd:

ingframin
23-04-2013, 21:57
L'ultima modifica è di 2 mesi fa, quindi dovrebbe essere ancora attivo come progetto. E non potrebbe essere altrimenti, perché è abbastanza gettonato. ;)

Aggiungo che la mailing list e' parecchio attiva.
Qualcuno si sta gia' adoperando per fare il porting su python 3, credo che non ci vorra' molto per avere web.py aggiornato per il "nuovo" python.

Il bello di questo framework e' che e' veramente semplice, io stesso sono riuscito a fare cose egregie senza sapere praticamente nulla di sviluppo web prima di usarlo.

Gli aggiornamenti non sono molto frequenti anche perche' e' praticamente bug free... E' cosi' piccolo che anche smazzarsi il codice sorgente da soli e' davvero lavoro di un giorno, quindi anche se qualcosa torna poco e' abbastanza facile scovare l'eventuale errore.
Forse l'unica cosa che davvero gli manca e' un ORM ma ho visto che non e' difficile integrarlo con altre cose come sqlalchemy.

cdimauro
24-04-2013, 07:07
Non ho mai usato ORM, perché in questi anni ho realizzato un mio "wrapper" di alto livello che mi consente di interfacciarmi a un engine SQL con un sufficiente livello di astrazione, e con sintassi simile.

Comunque web.py è in giro da un po' di anni, ed essendo piccolo è abbastanza rodato e testato, per cui si capisce anche da questo la poca attività sul repository.

Non mi spiego, invece, come mai non sia ancora stato portato su Python3, visto che parliamo, appunto, di un progetto "minuscolo" (rispetto a giganti come Django), ma in ogni caso molto usato (per cui l'interesse a vederlo girare sulle ultime incarnazioni di Python c'è di sicuro).

kwb
24-04-2013, 08:31
ORM?
https://it.wikipedia.org/wiki/Object-relational_mapping

Ammesso si tratti di questo, se ho capito bene è ciò che unisce la programmazione con i database relazionali ( data mining e creazione ). :stordita:

GByTe87
24-04-2013, 08:35
ORM?
https://it.wikipedia.org/wiki/Object-relational_mapping

Ammesso si tratti di questo, se ho capito bene è ciò che unisce la programmazione con i database relazionali ( data mining e creazione ). :stordita:

Si, quello. Banalmente mappi le entità di un database in classi nel tuo sorgente. Idealmente ti permette di interagire con database senza scrivere neanche una riga di sql. :D

cdimauro
24-04-2013, 10:29
Preferisco questo:
DB.Users += 'Saro', 'Falsaperla', 'Catania', 39 # INSERT
DB.Users[City == 'Catania'] = Age == 40 # UPDATE
DB.Users -= City == 'Catania # DELETE
DB.Users[Name, Surname].Where[City == 'Catania'].OrderBy[Name, Surname][ : 10].List() # SELECT; prende i primi 10 valori, e restituisce una lista di tuple.
DB.Cities[ID, Name, Surname].Dict() # SELECT, restituisce un dizionario con chiave = ID, e come valore la tupla che contiene la coppia nome e cognome.
DB.UpdateCityZipCode(123, '95100') # Richiama la stored procedure UpdateCityZipCode
DB.GetCitiesByZipCode('95100').List() # Richiama la stored procedure e restituisce il contenuto come lista di tuple.
Senza usare ORM, classi, et similia...

banryu79
24-04-2013, 14:29
Preferisco questo:
DB.Users += 'Saro', 'Falsaperla', 'Catania', 39 # INSERT
DB.Users[City == 'Catania'] = Age == 40 # UPDATE
DB.Users -= City == 'Catania # DELETE
DB.Users[Name, Surname].Where[City == 'Catania'].OrderBy[Name, Surname][ : 10].List() # SELECT; prende i primi 10 valori, e restituisce una lista di tuple.
DB.Cities[ID, Name, Surname].Dict() # SELECT, restituisce un dizionario con chiave = ID, e come valore la tupla che contiene la coppia nome e cognome.
DB.UpdateCityZipCode(123, '95100') # Richiama la stored procedure UpdateCityZipCode
DB.GetCitiesByZipCode('95100').List() # Richiama la stored procedure e restituisce il contenuto come lista di tuple.
Senza usare ORM, classi, et similia...
Molto bello Cesare! :cool:
Adesso però facci vedere il sorgente :D

kwb
24-04-2013, 20:50
Si, quello. Banalmente mappi le entità di un database in classi nel tuo sorgente. Idealmente ti permette di interagire con database senza scrivere neanche una riga di sql. :D
Ah ora capisco la parte interessante..
Cioè si può anche arrivare a gestire DB in SQL senza sapere minimamente una mazza di data mining e teoria dei db :eek:

cdimauro
24-04-2013, 22:13
Molto bello Cesare! :cool:
Adesso però facci vedere il sorgente :D
Sono geloso. :O Anche perché ho impiegato parecchio tempo, e visto che mi consente di essere molto produttivo, lo tengo per me per adesso.

In futuro è possibile che lo rilasci, ma prima devo eliminare qualche idiosincrasia e duplicato (fare le stesse cose in più di un modo NON va bene per la filosofia di Python), e aggiungere una bella batteria di test.
Ah ora capisco la parte interessante..
Cioè si può anche arrivare a gestire DB in SQL senza sapere minimamente una mazza di data mining e teoria dei db :eek:
Almeno un minimo di come sono fatti e funzionano i db devi saperlo.

GByTe87
24-04-2013, 22:35
Ah ora capisco la parte interessante..
Cioè si può anche arrivare a gestire DB in SQL senza sapere minimamente una mazza di data mining e teoria dei db :eek:

Occhio che con 'data mining' si intende qualcosa di completamente diverso.
Comunque, come ben dice cdimauro, non puoi usare qualcosa che non sai come funziona, quindi i DB è meglio se li conosci comunque (e te lo dice uno che sa a malapena mettere in croce due join :asd:)

Sono geloso. :O Anche perché ho impiegato parecchio tempo, e visto che mi consente di essere molto produttivo, lo tengo per me per adesso.

In futuro è possibile che lo rilasci, ma prima devo eliminare qualche idiosincrasia e duplicato (fare le stesse cose in più di un modo NON va bene per la filosofia di Python), e aggiungere una bella batteria di test.

Se e quando decidi di pubblicare i sorgenti tienimi in considerazione. Leggere il codice altrui è sempre un bell'allenamento. :D

kwb
24-04-2013, 23:17
Almeno un minimo di come sono fatti e funzionano i db devi saperlo.Si un minimo!

Occhio che con 'data mining' si intende qualcosa di completamente diverso.
Comunque, come ben dice cdimauro, non puoi usare qualcosa che non sai come funziona, quindi i DB è meglio se li conosci comunque (e te lo dice uno che sa a malapena mettere in croce due join :asd:)

Non so quale sia il significato ufficialmente riconosciuto dal mondo guru informatico per data mining :D . Io con quel termine intendo saper recuperare i dati necessari con opportune query.
Cmq bella sta cosa degli orm: ho fatto un po' di DB in uni e devo dire che non fa per me >_>

Sta discussione me la tengo segnata che poi quando ho tempo torno a vederla. Trovo Python molto interessante e sono discretamente appassionato di programmazione/design web. Perchè non unire le due cose? :D

GByTe87
24-04-2013, 23:40
Con data mining ci si riferisce ad una serie di tecniche di analisi utilizzate per estrarre informazioni e riconoscere pattern all'interno di grosse quantità di dati, spesso anche destrutturati. Credo sia la branca più 'statistica' dell'informatica. :stordita:

cdimauro
25-04-2013, 06:36
Se e quando decidi di pubblicare i sorgenti tienimi in considerazione. Leggere il codice altrui è sempre un bell'allenamento. :D
Certamente. :)
Cmq bella sta cosa degli orm: ho fatto un po' di DB in uni e devo dire che non fa per me >_>
E' la stessa cosa che dissi al professore di "Elaborazione dell'informazione non numerica" (si chiamava così all'epoca), senza sapere che tenesse quel corso. :asd:

Poi la vita ti "castiga", e i database sono finiti per diventare il mio pane quotidiano.

Mai web, mai database, e soprattutto mai MySQL: indovina come m'è andata a finire... :asd: :asd: :asd:
Sta discussione me la tengo segnata che poi quando ho tempo torno a vederla. Trovo Python molto interessante e sono discretamente appassionato di programmazione/design web. Perchè non unire le due cose? :D
Vero: si sposano benissimo. Se c'è una cosa che non manca in Python, è l'interesse e le librerie/framework per il web. :cool:

WarDuck
25-04-2013, 09:45
C'è anche Tornado che non è male:

http://www.tornadoweb.org/en/stable/

Inoltre supporta anche i WebSocket.

cdimauro
25-04-2013, 10:30
E' impressionante (http://en.wikipedia.org/wiki/Tornado_(web_server)), anche perché funge anche da frontend HTTP (non serve apache, mentre con web.py uso apache + mod_wsgi + web.py).

Peccato che non supporti Windows (https://groups.google.com/forum/?fromgroups=#!topic/python-tornado/vvsFRVb8M10), per cui non posso svilupparci. :cry:

banryu79
25-04-2013, 13:50
Sono geloso. :O Anche perché ho impiegato parecchio tempo, e visto che mi consente di essere molto produttivo, lo tengo per me per adesso.

Ma figurati, lo capisco benissimo, la mia era solo una provocazione gratuita, :Prrr: oltre che un apprezzamento (come immagino avrai capito da te).

kwb
25-04-2013, 18:15
E' impressionante (http://en.wikipedia.org/wiki/Tornado_(web_server)), anche perché funge anche da frontend HTTP (non serve apache, mentre con web.py uso apache + mod_wsgi + web.py).

Peccato che non supporti Windows (https://groups.google.com/forum/?fromgroups=#!topic/python-tornado/vvsFRVb8M10), per cui non posso svilupparci. :cry:

Ma domanda, se uso MAMP ( sono su Mac ) o XAMPP ho bisogno d'altro per far andare i file creati con web py?