PDA

View Full Version : [Python] WSGI + webframeworks


Y3PP4
13-09-2009, 19:30
Sera a tutti,
ho intenzione di fare qualcosa con python sul web e questa volta usare WSGI.
Dico "questa volta" perchè in passato realizzai un sito web con twisted + nevow.

Ho letto la PEP333 (ok, lo ammetto, non tutta, ma solo le definizioni, poi mi son arrangiato col sito wiki wsgi) e sono riuscito a realizzare semplici pagine con mod_wsgi. Per ora la cosa più complessa che ho realizzato con questa tecnologia è una semplice risposta della funziona application che stampa tramite un dict tutte le variabili d'ambiente del server.
Adesso però per realizzare una sorta di engine per futuri siti web ho pensato di utilizzare uno dei webframework che conosco: per ora vorrei provare con Pylons o Web2Py, ma mi sfuggono alcune cose su come questi framework interagiscano col wsgi di apache.
Mi pare di capire che sia necessario un VHost in cui eseguo il server wsgi dell'applicazione?

Se è così mi vengono già due dubbi:
- Essendo un server python meno potente di uno in C (come emerse da una discussione sulla mailing list di python) WSGI non riuscirebbe a garantire, in questo modo, il suo pregio principale, ovvero la sua velocità, no? (dato che dipende dall'applicazione python, che rallenta)
- Sarebbe molto più difficile divulgare le applicazioni python dato che avrei bisogno di uno spazio che mi permetta non solo di usare WSGI e il framework ma addirittura di creare VHost (e non sò se ad esempio su Unbit sia possibile, oppure l'unica soluzione abbordabile sia un Virtual Server).

Chi sà rispondere ?
Mi piacerebbe usare Python anche sul web, ma vorrei poter sfruttare a pieno i framework che usano WSGI e non essere quindi legato a mod_python (anche per una questione di portabilità - mod_python è solo per apache ed essendo una api del webserver, una reimplementazione potrebbe richiedere alcune modifiche, cosa non prevista secondo lo standard WSGI che punta anche su questo aspetto).

Grazie mille!

cdimauro
14-09-2009, 07:14
Finora ho realizzato soltanto 2 applicazioni web vere e proprie (anche se rigorosamente in bianco e nero: HTML "puro" docet :D) e ho utilizzato apache + mod_python.

In genere realizzato server HTTP, sempre con apache & mod_python, ma di recente mi sono scontrato con la complessità di configurazione di apache e con le limitazioni troppo seccanti di mod_python, per cui sono passato a lighttpd come server HTTP e a web.py (http://webpy.org/) come framework per lo sviluppo.

Li trovo decisamente più semplici, leggeri e performanti (vedi anche i casi di successo di web.py, con reddit in particolare).

Non so se possono essere utili per risolvere tutti i tuoi problemi, ma ti consiglio di dargli un'occhiata.

Y3PP4
14-09-2009, 11:07
Anzitutto grazie mille della risposta.

In verità ci speravo rispondessi -non ho visto altri pythoniani affermati sul forum- :D

Anche io ho avuto alcuni problemi con la configurazione di apache ma per mia colpa, non avendo mai letto tutta la documentazione relativa.

Mi piace la soluzione da te proposta, sia perchè conosco la potenza (e la leggerezza) di lighty, sia perchè guardando rapidamente alcuni snippet mi sembra un metodo congeniale a come vorrei sviluppare. Guagagna un punto in più per il fatto che nella pagina del Recommended Setup nella sezione DB prima di mysql troviamo postgres :D


Boh, io ci provo. A 'sto punto non può che essere amore, spero fornisca un buon set di strumenti soprattutto per la gestione delle sessioni e dei cookie, è una cosa che in Python non ho mai trattato, trovando sempre i metodi belli e pronti.

Grazie ancora per la risposta,

buona giornata!

cdimauro
14-09-2009, 13:05
Figurati.

Comunque io sono un programmatore, e non mi posso mettere a studiare i miliardi di configurazioni di apache. Altrimenti avrei fatto il sistemista. :stordita:

Con lighttpd mi trovo molto meglio, e poi per lo sviluppo web.py integra già un server HTTP ed è quindi comodissimo da testare (zero config! :D).

Quanto ai cookie e alle sessioni, dal manuale online di web.py mi sembra semplicissimo gestirli.

Y3PP4
14-09-2009, 13:53
Hai perfettamente ragione.

Mi sà che per ora dovrò ripiegare sul server di sviluppo per web.py dato che lighty mi dà problemi con Vista... :s più tardi provo a sistemare tutto, ma ora son troppo curioso di toccare con mano web.py :fagiano:

Riguardo cookie e sessioni si ho visto che per altro si basa su un sistema di sessioni salvate nel database, cosi non ci sono problemi di privilegi, questo o quello che alla fine gli SP non forniscono e mi costringerebbero a soluzioni troppo spinte per semplici siti web.
Più lo guardo e più mi piace sto web.py, pensare che nella lista dei framework web del wiki di python non sono mai andato oltre la sezione "Popular Full-Stack Frameworks" e non l'avevo mai visto :D

cdimauro
14-09-2009, 13:56
Lo trovo molto "pythonic". :)

Comunque occhio che con Lighttpd non funziona il FastCGI su Windows. :muro:

Y3PP4
14-09-2009, 14:29
Lo trovo molto "pythonic". :):D

Comunque occhio che con Lighttpd non funziona il FastCGI su Windows. :muro:
Azz... hai ragione. Vabbè per lo sviluppo posso sempre "arrangiarmi" col server interno. Poi al massimo deployment sposto su Linux o BSD. L'importante è che tutto funzioni "as is" una volta sviluppato col server interno e poi portato su un server fastcgi/cgi/wsgi, dato che non voglio poi fare modifiche sostanziali (passi il fatto che col server interno devo usare la cartella static per i contenuti statici, meglio così il progetto è ordinato) :fagiano:

khelidan1980
15-09-2009, 10:53
Avete visto questo nuovo framework rilasciato dai dev di facebook?

http://www.tornadoweb.org/

Y3PP4
15-09-2009, 11:52
No, non lo conoscevo.

Sembra interessante, tanto più se è parte della tecnologia di facebook -non tanto per il servizio del sito, ma per le prestazioni che richiede-.

Mille grazie per la segnalazione :)

Da una rapidissima lettura della documentazione mi pare che a differenza di web.py -oltre a quello che dice esplicitamente, dei tools e della ottimizzazione- punti appunto sul proprio webserver, per servire i contenuti, mentre data la semplicità di avvio del server di web.py, credo che quest'ultimo sia pensato per il deployment su un webserver che supporti wsgi/fcgi/cgi.