2009-10-07 4 views
7

Wahrscheinlich ist es eine dumme Frage für diejenigen, die die Antwort kennt, aber ich bin ein Anfänger, und hier geht es:Python: Wie zeigt man Ergebnisse auf einer Webseite?

Ich habe ein Python-Skript, das ich in einer Befehlszeile mit einem Parameter ausführen, und es druckt mir einige Ergebnisse. Nehmen wir an, die Ergebnisse sind HTML-Code.

Ich habe noch nie irgendwelche Python-Programmierung für das Web gemacht und konnte es nicht herausfinden ... Ich brauche eine Seite (OK, ich weiß, wie man Dateien auf einen Server hochlädt, Apache läuft, Python ist installiert der Server ...) mit einem Bearbeitungsfeld, das diesen Parameter akzeptiert, und der Schaltfläche Senden, und ich brauche es, um die Ergebnisse auf einer Webseite zu "drucken", nachdem der Benutzer einen geeigneten Parameter eingegeben hat, oder eine Ausgabe in einem anzeigen Befehlszeilensituation werden gedruckt.

Ich habe Dive Into Python's Kapitel über "HTML Processing" und "HTTP Web Services" gelesen, aber sie beschreiben nicht, wonach ich suche.

Wenn die Antwort nicht kurz ist, würde ich sehr schätzen, Links zu den relevanteren Sachen zu lesen oder vielleicht die Schlüsselwörter, um dafür zu googeln.

Antwort

2

Klingt so, als müssten Sie nur CGI on apache aktivieren, was Ihre Ausgabe an die Webserver-Ausgabe weiterleitet.

Python hat CGI library können Sie einen Blick darauf werfen.

Hier ist ein essay by Guido (etwas veraltet)

Und ein interactive instruction, die vielversprechend aussieht.

p.s.

Vielleicht können Sie auch sehen Angebot von Google wollen für diese Google app engine (es kann nicht sein, was Sie wollen, obwohl)

+0

Es gibt viele Beispiele da draußen. Und viele Frameworks. Ich weiß nicht, ob jemand das immer noch benutzt, aber ich habe das "verdrehte" Framework für die Entwicklung von Web-Apps in Python verwendet. Viele Leute benutzen viele Dinge, einschließlich Django. Wo soll man anfangen? Wahrscheinlich, wo Oscar sagt, anzufangen. –

1

Sorry, es zu sagen, aber HTTP Web Services sind was Sie suchen. Denken Sie so darüber nach - Sie legen ein Formular auf eine Webseite und einen Absenden-Button. Das geht zu einem Web-Service, der die Anfrage akzeptiert und es auf diese Anfrage kaut, und gibt eine Antwort - die eine Seite von HTML ist. Sie müssen nie wirklich speichern das HTML, es wird immer dynamisch generiert, aber es ist trotzdem eine gültige Seite von HTML.

Betrachten Sie django http://www.djangoproject.com/ für ein hochwertiges Python-basiertes Web Service Toolkit. Der erste Schritt zum Verständnis des Anfrage/Antwort-Idioms besteht darin, sich die Anfrage als eine spezifisch formatierte (definiert durch CGI - dh es handelt sich um eine GET- oder POST-HTML-Aktion) Menge von Befehlszeilenparametern und die Antwort zu denken als spezifisch formatierte Ausgabe (HTML), die nicht an die Standardausgabe gesendet wird, sondern über die "Leitung" an einen Browser. Das Senden der Anfrage erfolgt über die Leitung und führt das Skript mit einigen Parametern aus, und Sie erhalten die Ausgabe - Ihre formatierte HTML-Seite - zurück.

+2

Django scheint sicher übertrieben für diese Art von Problem ... – Hortitude

+0

+1 auf den Kommentator, der "Overkill" sagt. –

4

Für solch eine einfache Aufgabe brauchen Sie wahrscheinlich nicht mehr als CGI. Glücklicherweise hat Python ein eingebautes cgi Modul, das tun sollte, was Sie wollen.

Oder Sie könnten in einige der minimalen Web-Frameworks, wie zum Beispiel web.py.

0

Ich stimme völlig mit Matt - Django ist das, was Sie wollen.Django bietet eine vollständige Lösung und wirklich wunderbare Dokumentation, die Ihnen helfen wird, etwas in Gang zu bringen. Wenn Ihre Anwendung wächst und komplizierter wird, kann Django immer noch arbeiten. Django funktioniert sogar für sehr große und sehr komplizierte Websites.

Werfen Sie einen Blick auf das kostenlose Buch, The Django Book.

Ein weiteres Plus bei Django: Wenn Sie Ihre Web-App in Django erstellen, können Sie sie in Google App Engine portieren.

+3

Also abstimmen matt? Warum eine zweite Antwort. –

+0

@Warren P, Ich habe eine zweite Antwort gegeben, weil ich einige Dinge sagen wollte, die Matt nicht gesagt hat. Ich meine, vergleichen Sie einfach meine Antwort mit seiner; Sie sind weit davon entfernt, identisch zu sein. Ich gab zu, dass er zuerst darauf antwortete, weil ich nicht versuchte, jemanden dazu zu bringen, mich anstatt Matt zu heben - ich versuchte nur, hilfsbereit zu sein. Vielleicht fühlst du, dass meine Antwort nichts Nützliches beiträgt; Wenn ja, schlage ich vor, dass Sie mich ablehnen. – steveha

+0

Eine ernsthafte Frage für die Community hier: Wäre es besser gewesen, dass StackOverflow-Manieren in Matts Antwort gegangen ist und angefangen hat, es zu bearbeiten, um meine anderen Punkte hinzuzufügen? Bis jetzt habe ich keine anderen Antworten bearbeitet, außer sie enthielten Fehler oder Code, der repariert werden musste. Es scheint falsch zu sein, meine Gedanken mit den Gedanken anderer zu vermischen, ohne zu fragen, und ich dachte, es wäre richtig, meine eigene Antwort zu veröffentlichen. Habe ich das falsch gemacht? – steveha

0

Ich habe nicht in PYTHON TAUCHEN gelesen, vielleicht ist das, was ich sage, überflüssig. Wie Daniel sagte, kann CGI für Sie arbeiten. Heutzutage wäre dies nur bei einfachen Sachen mit einer relativ geringen Anzahl von Treffern der Fall. Das Python-CGI-Modul ist dokumentiert . Ich habe dieses Modul immer für die Formularverarbeitung verwendet und nur Drucke für die Ausgabe erstellt. Soweit ich mir das vorstellen konnte, ist das die übliche Vorgehensweise, aber ich habe mit Python nicht viel CGI gemacht.

Sie sagen nicht, was Sie tun, also werde ich angeben, was offensichtlich ist: Stellen Sie sicher, dass Sie dem Server mitteilen, dass Sie eine Webseite ausgeben, wobei die allererste Ausgabe der Inhaltstyp ist gefolgt von einer Leerzeile. Typischerweise wird dies mit getan:

print "Content-Type: text/html" 
print 

(Für Python 2, 3 werden Sie Ihre Ausdrucke in Funktionsaufrufe vornehmen müssen.) Danach können Sie Ihre html, Header, Body drucken, usw. Tags und die tatsächlicher Inhalt.

0

A aktuelle Methode von einfacher Erstellung (one-of) Python Webseitenserver ist die wsgiref module.

wsgiref ist eine Referenzimplementierung der WSGI-Spezifikation, die zum Hinzufügen von WSGI-Unterstützung zu einem Webserver oder Framework verwendet werden kann.

einige SO qusetions (https://stackoverflow.com/search?q=[python]+wsgiref) für einige Code-Beispiele und Anregungen finden.

Die wsgiref example ist ein guter Anfang:

from wsgiref.simple_server import make_server 

def hello_world_app(environ, start_response): 
    status = '200 OK' # HTTP Status 
    headers = [('Content-type', 'text/plain')] # HTTP Headers 
    start_response(status, headers) 

    # The returned object is going to be printed 
    return ["Hello World"] 

httpd = make_server('', 8000, hello_world_app) 
print "Serving on port 8000..." 

# Serve until process is killed 
httpd.serve_forever() 
+0

wsgi gilt als "besser" als cgi, vor allem wegen der Skalierbarkeit in Produktions-Apps, oder? CGI ist in Ordnung für alle trivialen "weniger als 10 Benutzer" -Apps da draußen. Und es ist kein schlechter Ort, um mit CGI zu beginnen und dann zu wsgi zu wechseln, richtig? –

+0

Ich denke, das WSGI-Beispiel ist einfach genug - eine Option mit ähnlicher Komplexität wie CGI. – gimel

2

dessen Web-Server? Wenn es sich um einen Webserver handelt, der von einem Webhosting-Unternehmen oder jemand anderem bereitgestellt wird, und Sie keine Kontrolle darüber haben, müssen Sie herausfinden, auf welche Weise sie die Verwendung von Python zum Schreiben von Webanwendungen unterstützen. Es ist nicht genug zu wissen, dass Python verfügbar ist.

Wie von anderen gesagt, ist wahrscheinlich, dass zumindest CGI-Skripte, die Python verwenden, unterstützt werden. CGI ist jedoch nicht wirklich praktisch zum Ausführen großer Python-Web-Frameworks wie Django.

Es ist jedoch möglich, dass der Webserver auch FASTCGI unterstützt. Wenn dies der Fall ist, wird es möglich, solche größeren Python-Web-Frameworks zu verwenden, da FASTCGI persistente Prozesse verwendet, während CGI für jede Anforderung einen Prozess erstellt, bei dem der Overhead großer Python-Web-Frameworks die Verwendung von CGI im Allgemeinen unpraktisch macht.

Wenn der Apache-Server von anderen gesteuert wird, die einen eigenständigen Python-Webserver wie wsgiref verwenden, und das Proxying von Apache aus ist nicht möglich, da Apache dafür nicht eingerichtet werden kann.

So, wie die Verwendung von Python für Web-Anwendungen unterstützt wird und herausfinden, ob Sie nur ein Benutzer der Apache-Instanz sind, oder ob Sie die globalen Konfigurationsdateien ändern und neu starten können. Dies wird vorschreiben, was Sie tun und verwenden können.

Verwandte Themen