Il modo migliore per creare un semplice servizio Web Python [chiuso]


137

Uso python da anni, ma ho poca esperienza con la programmazione web python. Vorrei creare un servizio Web molto semplice che esponga alcune funzionalità di uno script Python esistente da utilizzare all'interno della mia azienda. Probabilmente restituirà i risultati in CSV. Qual è il modo più veloce per alzare qualcosa? Se influisce sul tuo suggerimento, probabilmente aggiungerò più funzionalità a questo, lungo la strada.


Questo mostra un bell'esempio veloce: dreamsyssoft.com/blog/blog.php?/archives/…
Rocky Pulley

github.com/pramttl/webipy Ho scritto questo strumento che trasforma automaticamente le funzioni di Python in endpoint Web. Ha alcune restrizioni sulle definizioni delle funzioni, ma è di gran lunga il modo più rapido per generare endpoint Web per le funzioni di Python. Infatti webipy usa django, ma genera automaticamente le viste django richieste per tutte le funzioni di Python. Non è necessario scrivere alcun "codice web".
Pranjal Mittal,

Risposte:


55

Dai un'occhiata a werkzeug . Werkzeug è nato come una semplice raccolta di varie utilità per le applicazioni WSGI ed è diventato uno dei moduli di utilità WSGI più avanzati. Include un potente debugger, oggetti di richiesta e risposta completi, utilità HTTP per gestire tag entità, intestazioni di controllo cache, date HTTP, gestione dei cookie, upload di file, un potente sistema di routing URL e un gruppo di moduli aggiuntivi forniti dalla community.

Include molti fantastici strumenti per lavorare con http e ha il vantaggio di poterlo usare con wsgi in diversi ambienti (cgi, fcgi, apache / mod_wsgi o con un semplice server Python semplice per il debug).


2
Ho finito per usare werkzeug per questo. Adoro quanto sia flessibile. Grazie per la raccomandazione
Jeremy Cantrell,

1
Ho provato altri tre framework web prima di arrivare a questo. Questo è il primo in cui sono riuscito a lavorare fuori dagli schemi. Ottimo rec!
BenDundee,

26

web.py è probabilmente il framework web più semplice in circolazione . "Bare" CGI è più semplice, ma sei completamente da solo quando si tratta di realizzare un servizio che effettivamente fa qualcosa.

"Ciao mondo!" secondo web.py non è molto più lungo di una versione CGI nuda, ma aggiunge la mappatura URL, la distinzione dei comandi HTTP e l'analisi dei parametri di query gratuitamente :

import web

urls = (
    '/(.*)', 'hello'
)
app = web.application(urls, globals())

class hello:        
    def GET(self, name):
        if not name: 
            name = 'world'
        return 'Hello, ' + name + '!'

if __name__ == "__main__":
    app.run()

Ah sì, web.py sembra fantastico. A partire da ora, il sito Web < webpy.org > dice: 500 - Errore interno del server Altrimenti, il nostro codice non funziona per me: ... app = web.application (urls, globals ()) AttributeError: oggetto 'module' non ha attributo 'application'
bortzmeyer,

1
Il sito web è tornato. Potresti voler controllare la tua versione, poiché il codice di Tim sembra giusto.
Charlie Martin,

1
Mi sono imbattuto anche in questo. Se stai eseguendo Ubuntu, la versione fornita nel repository 8.10 è piuttosto obsoleta. Prendi il più recente dal sito Web o usa easy_install e dovresti essere d'oro.
Bouvard,

secondo webpy.org (il sito web ufficiale web.py) yandex sta usando web.py (hanno 70 milioni di pagine viste / giorno) .. quindi deve essere efficiente ..
programmatore

Questo è esattamente ciò di cui avevo bisogno. Semplice, diretto al punto e facile da usare.
GuiSim,

15

Il modo più semplice per ottenere uno script Python online è usare CGI:

#!/usr/bin/python

print "Content-type: text/html"
print

print "<p>Hello world.</p>"

Inserisci quel codice in uno script che risiede nella directory CGI del tuo server web, rendilo eseguibile ed eseguilo. Il cgimodulo ha una serie di utilità utili quando è necessario accettare parametri dall'utente.


Quando si esegue questo metodo, assicurarsi che il gestore sia configurato correttamente per gli script Python in Apache, ad esempio: AddHandler cgi-script .cgi .pl .py
Tegan Snyder

1
Il punto è eseguire l'app senza alcun web server aggiuntivo come apache.
AstraSerg,

12

Il CGI crudo è una specie di dolore, Django è un po 'pesante. Esistono numerosi framework più semplici e leggeri, ad esempio CherryPy . Vale la pena guardarsi un po 'in giro.


2
+1 per CherryPy. È perfetto per quando vuoi qualcosa di più semplice di Django.
Steve Losh,

9

Guarda l' implementazione di riferimento WSGI . Lo hai già nelle tue librerie Python. È abbastanza semplice.


Come ho detto, la mia esperienza con la programmazione Web Python è piuttosto limitata, ma un'app WSGI può essere eseguita "autonomamente", senza un server Web come Apache, giusto?
Jeremy Cantrell,

Sì. Totalmente autonomo. Funziona alla grande. Tuttavia, non è possibile utilizzare la porta 80 senza Apache o privilegi speciali, ma questo è un problema di sicurezza del sistema operativo.
S. Lott,

4

Se intendi con "Web Service" qualcosa a cui accedono altri programmi SimpleXMLRPCServer potrebbe essere giusto per te. È incluso in ogni installazione di Python dalla versione 2.2.

Per cose semplici accessibili all'uomo di solito uso Pythons SimpleHTTPServer che viene fornito con ogni installazione. Ovviamente potresti anche accedere a SimpleHTTPServer dai programmi client.


2

La vita è semplice se ottieni un buon framework web. I servizi Web a Django sono facili. Definisci il tuo modello, scrivi le funzioni di visualizzazione che restituiscono i tuoi documenti CSV. Salta i modelli.


2

Se intendi "servizio web" in senso SOAP / WSDL, potresti voler dare un'occhiata Generare un WSDL usando Python e SOAPpy


Intendo semplicemente "servizio web" nel senso più informale. Fornire dati via http che verranno consumati da qualche altra app. Come ho detto nella domanda, sarà probabilmente CSV.
Jeremy Cantrell,

WSDL sarebbe probabilmente la maggior parte degli standard basati ... e quello sarebbe per essere consumato ...
Thufir

1

Non ho nulla contro Twisted, ma questo è esattamente ciò a cui volevo stare lontano (dipendenze pesanti).
Jeremy Cantrell,

@Jeremy: Twisted non è pesante.
nosklo,

sono d'accordo che a prima vista può essere un po 'scoraggiante, ma non sono sicuro di cosa intendi per "dipendenze pesanti". Per quanto ne so, utilizza pacchetti di Python standard. Ci sono molte parti in movimento all'interno del modulo ma per cose semplici non è necessario farlo molto.
mabbit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.