Der beste Weg, um einen einfachen Python-Webdienst zu erstellen [geschlossen]

137

Ich benutze Python seit Jahren, habe aber wenig Erfahrung mit Python-Webprogrammierung. Ich möchte einen sehr einfachen Webdienst erstellen, der einige Funktionen eines vorhandenen Python-Skripts für die Verwendung in meinem Unternehmen verfügbar macht. Es wird wahrscheinlich die Ergebnisse in csv zurückgeben. Was ist der schnellste Weg, um etwas aufzubauen? Wenn es Ihren Vorschlag betrifft, werde ich wahrscheinlich später weitere Funktionen hinzufügen.

Jeremy Cantrell
quelle
Dies zeigt ein schönes schnelles Beispiel: dreamsyssoft.com/blog/blog.php?/archives/…
Triton Man
github.com/pramttl/webipy Ich habe dieses Tool geschrieben, das Ihre Python-Funktionen automatisch in Web-Endpunkte umwandelt. Es gibt einige Einschränkungen für Ihre Funktionsdefinitionen, aber es ist bei weitem der schnellste Weg, Webendpunkte für Ihre Python-Funktionen zu generieren. Infact Webipy verwendet Django, generiert jedoch automatisch Django-Ansichten, die für alle Ihre Python-Funktionen erforderlich sind. Sie müssen keinen "Webcode" schreiben.
Pranjal Mittal

Antworten:

55

Werfen Sie einen Blick auf werkzeug . Werkzeug begann als einfache Sammlung verschiedener Dienstprogramme für WSGI-Anwendungen und hat sich zu einem der fortschrittlichsten WSGI-Dienstprogrammmodule entwickelt. Es enthält einen leistungsstarken Debugger, voll funktionsfähige Anforderungs- und Antwortobjekte, HTTP-Dienstprogramme zur Verarbeitung von Entitäts-Tags, Cache-Steuerungsheader, HTTP-Daten, Cookie-Behandlung, Datei-Uploads, ein leistungsstarkes URL-Routing-System und eine Reihe von Addon-Modulen, die von der Community bereitgestellt wurden.

Es enthält viele coole Tools für die Arbeit mit http und hat den Vorteil, dass Sie es mit wsgi in verschiedenen Umgebungen (cgi, fcgi, apache / mod_wsgi oder mit einem einfachen Python-Server zum Debuggen) verwenden können.

Peter Hoffmann
quelle
2
Ich habe dafür werkzeug benutzt. Ich finde es toll, wie flexibel es ist. Danke für die Empfehlung.
Jeremy Cantrell
1
Ich habe drei andere Web-Frameworks ausprobiert, bevor ich zu diesem kam. Dies ist der erste, den ich sofort arbeiten lassen kann. Tolle Aufnahme!
BenDundee
26

web.py ist wahrscheinlich das einfachste Webframework auf dem Markt . "Bare" CGI ist einfacher, aber Sie sind völlig allein, wenn es darum geht, einen Dienst zu erstellen, der tatsächlich etwas bewirkt.

"Hallo Welt!" Laut web.py ist es nicht viel länger als eine reine CGI-Version, aber es fügt URL-Zuordnung, HTTP-Befehlsunterscheidung und kostenlose Analyse von Abfrageparametern hinzu :

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()
Tim Lesher
quelle
Ah ja, web.py scheint großartig. Ab sofort heißt es auf der Website < webpy.org >: 500 - Interner Serverfehler Andernfalls funktioniert unser Code bei mir nicht: ... app = web.application (urls, globals ()) AttributeError: 'module'-Objekt hat kein Attribut 'Anwendung'
Bortzmeyer
1
Die Website ist zurück. Vielleicht möchten Sie Ihre Version überprüfen, da Tims Code richtig aussieht.
Charlie Martin
1
Ich bin auch darauf gestoßen. Wenn Sie Ubuntu ausführen, ist die im 8.10-Repository enthaltene Version ziemlich veraltet. Holen Sie sich das Neueste von der Website oder verwenden Sie easy_install und Sie sollten golden sein.
Bouvard
Laut webpy.org (der offiziellen web.py-Website) verwendet yandex web.py (sie haben 70 Millionen Seitenaufrufe pro Tag). Es muss also effizient sein.
Programmierer
Genau das brauchte ich. Einfach, direkt auf den Punkt und einfach zu bedienen.
GuiSim
15

Der einfachste Weg, ein Python-Skript online zu stellen, ist die Verwendung von CGI:

#!/usr/bin/python

print "Content-type: text/html"
print

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

Fügen Sie diesen Code in ein Skript ein, das sich in Ihrem Webserver-CGI-Verzeichnis befindet, machen Sie ihn ausführbar und führen Sie ihn aus. Das cgiModul verfügt über eine Reihe nützlicher Dienstprogramme, wenn Sie Parameter vom Benutzer akzeptieren müssen.

Greg Hewgill
quelle
Stellen Sie bei dieser Methode sicher, dass der Handler für Python-Skripte in Apache entsprechend eingerichtet ist. Beispiel: AddHandler-CGI-Skript .cgi .pl .py
Tegan Snyder
1
Der Punkt ist, App ohne zusätzlichen Webserver wie Apache auszuführen.
AstraSerg
12

Rohes CGI ist eine Art Schmerz, Django ist eine Art Schwergewicht. Es gibt eine Reihe von einfacheren, leichteren Frameworks, z . B. CherryPy . Es lohnt sich, sich ein bisschen umzuschauen.

Charlie Martin
quelle
2
+1 für CherryPy. Es ist perfekt, wenn Sie etwas Einfacheres als Django wollen.
Steve Losh
9

Schauen Sie sich die WSGI-Referenzimplementierung an . Sie haben es bereits in Ihren Python-Bibliotheken. Es ist ganz einfach.

S.Lott
quelle
Wie gesagt, meine Erfahrung mit Python-Webprogrammierung ist ziemlich begrenzt, aber eine WSGI-App kann "eigenständig" ohne einen Webserver wie Apache ausgeführt werden, oder?
Jeremy Cantrell
Ja. Völlig eigenständig. Funktioniert super. Sie können Port 80 jedoch nicht ohne Apache oder spezielle Berechtigungen verwenden - dies ist jedoch ein Sicherheitsproblem des Betriebssystems.
S.Lott
4

Wenn Sie mit "Web Service" meinen, ist etwas, auf das andere Programme SimpleXMLRPCServer zugreifen, möglicherweise das Richtige für Sie. Es ist in jeder Python-Installation seit Version 2.2 enthalten.

Für einfache, für Menschen zugängliche Dinge verwende ich normalerweise Pythons SimpleHTTPServer, der auch mit jeder Installation geliefert wird. Natürlich können Sie auch über Client-Programme auf SimpleHTTPServer zugreifen.

max
quelle
2

Das Leben ist einfach, wenn Sie ein gutes Web-Framework erhalten. Webdienste in Django sind einfach. Definieren Sie Ihr Modell und schreiben Sie Ansichtsfunktionen, die Ihre CSV-Dokumente zurückgeben. Überspringen Sie die Vorlagen.

S.Lott
quelle
2

Wenn Sie "Webdienst" im Sinne von SOAP / WSDL meinen, sollten Sie sich das ansehen Generieren einer WSDL mit Python und SOAPpy

che
quelle
Ich meine nur "Webdienst" im informellsten Sinne. Bereitstellung von Daten über http, die von einer anderen App verwendet werden. Wie ich in der Frage sagte, wird es wahrscheinlich CSV sein.
Jeremy Cantrell
WSDL wäre wahrscheinlich die am meisten auf Standards basierende ... und das wäre für den Konsum ...
Thufir
1

vielleicht verdreht http://twistedmatrix.com/trac/

Mabbit
quelle
Ich habe nichts gegen Twisted, aber genau davon wollte ich mich fernhalten (starke Abhängigkeiten).
Jeremy Cantrell
@ Jeremy: Twisted ist nicht schwer.
Nosklo
Ich bin damit einverstanden, dass es auf den ersten Blick etwas entmutigend sein kann, aber ich bin mir nicht sicher, was Sie unter "starken Abhängigkeiten" verstehen. Soweit ich weiß, werden Pakete aus Standard-Python verwendet. Es gibt viele bewegliche Teile im Modul, aber für einfache Dinge müssen Sie nicht so viel tun.
Mabbit