2009-02-27 4 views
29

So che i vari framework hanno i loro vantaggi, ma personalmente voglio che il mio sviluppo web in python sia il più diretto possibile: meno la scrittura sul framework, più scrittura python.Come uso python per lo sviluppo web senza fare affidamento su un framework?

L'unica cosa che ho trovato fino ad ora che mi permette di farlo nel modo più ovvio possibile è web.py ma ho delle leggere preoccupazioni sulle sue prestazioni.

Per quelli di voi che usano nginx (o un altro aroma) + mod_wsgi + web.py ... come vanno le prestazioni? Può essere ulteriormente migliorato?

Per quelli di voi che hanno utilizzato web.py, è piaciuta l'idea e ha continuato a scrivere qualcosa di meglio o trovato qualcosa di meglio ... mi interessa indicarmi la fonte?

Mi piacerebbe conoscere tutti gli approcci cospicui, minimali ma potenti.

+2

Sviluppo Web con Django IS straight-forward. Scusa, dovevo farlo. Non capisco cosa non amare di Django. –

+0

Se rendi meno insultante probabilmente non verrai svalutato tanto. – Malfist

+0

In che modo questo post è offensivo? Non è certamente offensivo. – Blorgbeard

risposta

18

È divertente come, anche se richiesto con una domanda che chiede come scrivere senza un framework, tutti continuano a compilare per promuovere il loro framework preferito. L'OP si lamenta di non volere un "quadro pesante" e le risposte menzionano Twisted, di tutte le cose ?! Vieni ora, davvero.

Sì, è è perfettamente possibile scrivere app WSGI diritte e acquisire le funzionalità desiderate dai moduli standalone, invece di adattare il codice alla vista di un particolare framework del mondo.

Per intraprendere questa strada, in generale, si desidera avere familiarità con le basi di HTTP e CGI (poiché WSGI eredita un sacco da quella specifica precedente). Non è necessariamente un approccio da raccomandare ai principianti, ma è abbastanza fattibile.

Mi piacerebbe sentire su tutti i approcci ma potenti minimi cospicui

Non sentirete su di loro, perché nessuno ha un interesse nel promuovere tribale “farlo te stesso "come metodologia. Io, io uso un particolare pacchetto di modelli standalone, un particolare pacchetto di lettura di moduli standalone, un particolare livello di accesso ai dati e alcuni moduli di utilità per la preparazione a casa. Non sto scrivendo su una particolare filosofia su cui fare proselitismo, sono solo strumenti noiosi che potrebbero essere scambiati e sostituiti con qualcos'altro altrettanto buono.

+0

Non sono d'accordo. mod_python e pss non sono un framework, è più come farlo da soli. Vedi la mia risposta qui sotto. – user26294

+2

"... pacchetto templating, ... pacchetto di lettura dei moduli, un ... livello di accesso ai dati" Nomi per favore. Le generalità non aiutano il resto di noi. –

+0

Quindi stai utilizzando alcuni pacchetti stand-alone per varie cose. Sembra che tu stia utilizzando una struttura dopo tutto. :) –

3

Per quello che vale, ho scritto il mio sito web in mod_python senza alcun quadro di intervento come Django. Non avevo davvero motivo di lamentarmi. (Beh forse un po ', mod_python è un po' bizzarro in alcuni modi ma non nei casi d'uso comuni) Una cosa è certa, ti permetterà sicuramente di scrivere Python ;-)

+1

mod_python è notoriamente cattivo gusto. Usare wsgi e mod_wsgi è di gran lunga migliore. Personalmente, ho iniziato a fare CGI, che è anche sicuramente Python puro, senza framework, niente di extra. –

+0

-1 per raccomandare mod_python cerebrale morto. mod_wsgi è la strada da percorrere. mod_wsgi è uno standard PEP. – nosklo

+0

Non ho consigliato mod_python. Ho semplicemente detto che l'ho usato e ha funzionato bene per me. Non sfiderei l'affermazione che mod_wsgi è migliore, ma non l'ho mai usato. –

37

La strada da percorrere è wsgi.

WSGI è l'interfaccia del gateway del server Web . Si tratta di una specifica per server Web e server di applicazioni per comunicare con le applicazioni Web (sebbene possa essere utilizzata anche per più di questo). È uno standard Python, descritto in dettaglio in PEP 333.

Tutti i framework attuali supportano wsgi. Un sacco di web server lo supportano anche (apache incluso, tramite mod_wsgi). È la strada da percorrere se vuoi scrivere il tuo quadro.

Ecco ciao mondo, scritta al WSGI direttamente:

def application(environ, start_response): 
    status = '200 OK' 
    response_headers = [('Content-type','text/plain')] 
    start_response(status, response_headers) 
    return ['Hello world!\n'] 

Mettete questo in un file.py, puntare la configurazione di Apache mod_wsgi ad esso, e verrà eseguito. Pitone puro. Nessuna importazione Solo una funzione python.

Se si sta veramente scrivendo il proprio framework, è possibile controllare werkzeug. Non è un framework, ma una semplice raccolta di varie utilità per le applicazioni WSGI ed è diventato uno dei moduli di utility WSGI più avanzati. Include un potente debugger, oggetti di richiesta e risposta completi, utilità HTTP per gestire tag di entità, intestazioni di controllo della cache, date HTTP, gestione dei cookie, upload di file, un potente sistema di routing degli URL e un mucchio di moduli di addon forniti dalla community. Prendi la parte noiosa dalle tue mani.

9

È anche possibile controllare cherrypy. L'obiettivo di cherrypy è di essere un framework che ti permette di scrivere python. Cherrypy ha il proprio server web piuttosto buono, ma è compatibile con wsgi in modo da poter eseguire applicazioni cherrypy in apache tramite mod_wsgi. Ecco ciao mondo in cherrypy:

import cherrypy 

class HelloWorld(object): 
    def index(self): 
     return "Hello World!" 
    index.exposed = True 

cherrypy.quickstart(HelloWorld()) 
+0

Ho anche iniziato con web.py e spostato su CherryPy. Sembra molto web.py in quanto sembra che sto scrivendo codice Python invece di codice framework, ma è molto più ricco di funzionalità per la cosa di fantasia occasionale che devo fare. –

0

Cosa c'è di sbagliato in Django? Non ti costringe a usare il suo ORM e i controller sono semplici funzioni Python invece dei metodi di classe simili a Rails. Inoltre, il routing dell'URL viene eseguito con espressioni regolari anziché con un'altra sintassi inventata dal framework.Se django ti sembra troppo per te, ti consiglio di dare un'occhiata a Werkzeug

0

Sono un appassionato di Google AppEngine. Io uso l'ORM e il sistema di template, ma altrimenti seguo un design con pattern REST e implemento solo i metodi Python per i corrispondenti HTTP. Rende centrale l'interazione HTTP e opzionalmente fornisce altre cose da usare. Inoltre non più configurazione e gestione del tuo ambiente di distribuzione!

1

Ho scritto alcune piccole applicazioni Web utilizzando mod-python e PSP - l'equivalente di mod-python a php.

In un caso, ho scritto una pagina Web che genera note di rilascio ispezionando il nostro repository del codice sorgente. L'ho riscritto in PHP e sono rimasto sorpreso nello scoprire che la versione PSP era circa il 20% più veloce, oltre a rappresentare circa la metà delle linee di codice.

Quindi, per piccoli problemi almeno, psp ha funzionato bene per me.

+0

PSP sembra interessante. – icedwater

8

+1 a tutte le risposte con WSGI.

Eric Florenzo ha scritto un ottimo post sul blog ultimamente dovresti leggere: Writing Blazing Fast, Infinitely Scalable, Pure-WSGI Utilities. Questo ti darà un'idea migliore di WSGI puro al di là di Hello World. Presta attenzione anche ai commenti, in particolare al primo commento di Kevin Dangoor in cui raccomanda almeno di aggiungere WebOb al set di strumenti.

1

Penso che dipenda dalla definizione di cosa sia un framework e cosa dovrebbe fare per voi.

Come indicato, un "framework" molto minimale sarebbe WSGI in quanto definisce solo una piccola interfaccia per l'interfaccia con un server web. Ma è un approccio potente grazie al middleware che puoi mettere tra la tua app e il server.

Se si desidera un po 'di più, come alcuni URL per il mapping delle funzioni, allora si hanno alcune scelte, alcune delle quali sono già state citate.

Se andate oltre potreste venire a Pylons o Turbogears o Django, dopotutto forse Zope ma diventa più grande e forse il dolore e voi comprate sempre le opinioni di quel quadro.

Quello che uso di recente sempre di più (proveniente da Zope/Plone) è repoze.bfg. È molto piccolo, non viene fornito con un ORM in bundle (quindi è possibile utilizzare SQLAlchemy, Storm o semplicemente accedere a un database di oggetti come ZODB). Quello che fa è fondamentalmente gestire come vieni da un URL a una vista che è una funzione. Supporta sia l'URL Mapping (a la Routes) che l'object traversal, che IMHO è molto potente in alcune circostanze esp. se hai una mappatura non così rigorosa. La cosa buona è che viene fornito direttamente con un framework di sicurezza basato su ACL che può essere utilizzato se si desidera sapere quale IMHO è molto pratico da avere. In questo modo non hai bisogno di decoratori che sembrano essere usati principalmente per cose del genere.

E naturalmente basato su WSGI. Cerca anche lo repoze subversion repository per un bel po 'di middleware e la roba Paste è anche molto utile per le attività relative a WSGI.

2

Perché hai dubbi sulle prestazioni di web.py? Come menzionato lo here, usiamo CherryPy (il web server "incorporato in" web.py) dietro lo nginx per servire la maggior parte dell'HTML su Oyster.com - nginx divide il traffico su 2 o 3 server web ciascuno con 4 processi Python, e possiamo gestire facilmente centinaia di richieste al secondo.

Oyster.com è un sito Web di grandi volumi con una media di 200.000 visualizzazioni di pagina generate in modo dinamico al giorno e con un numero molto più alto di quello. Tuttavia, utilizziamo una rete di distribuzione dei contenuti (CDN) per le nostre risorse statiche come immagini e CSS.

Ci interessa sicuramente le prestazioni (la maggior parte delle nostre pagine esegue il rendering in meno di 25 ms), ma web.py non è il collo di bottiglia. I nostri colli di bottiglia sono il rendering dei modelli (utilizziamo lo Cheetah, che è abbastanza veloce ma non ultraterreno veloce) e le query del database (memorizziamo in cache pesantemente e manteniamo il numero di query del database per pagina a 0 o 1) e accedendo ai prezzi degli hotel di terze parti provider (questi sono accessibili quando si effettua una ricerca con date che non abbiamo già memorizzato nella cache).

Ricorda, l'ottimizzazione prematura è la radice di tutti i mali - a meno che non stai servendo google.com, web.py probabilmente funzionerà per te.