mod_python oder CGI ???

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
hulahub

Hallo,

ich bin Python neuling und habe einige Fragen.
Ich möchte Python zu 99% nur benutzen um Webseiten zu creieren.
Ich habe viele Jahre PHP komplett durch geknetet aber das fehlende oder schlechte OO hat mich dazu bewegt endlich mal eine saubere OO sprache zu verwenden.

Eines vorweg. Ich möchte bei Apache bleiben.
Am liebsten Apache 2
1 ist allerdings auch ok.

So nun meine Fragen:
da ich zuvor nur mit PHP + Apache gearbeitet habe und PHP als mod_php eingebunden habe stellt sich mir die Frage was CGI eignetlich ist. Common Gateway Interface.. naja was versteckt sich dahinter?

Ist es sinnvoller Python als CGI (?) einzubinden und wenn ja was muss ich beachten wie läuft dann die Programmierung ab? Ganz normal oder muss ich auf spezielle funktionen zurückgreifen, was ist zu beachten, etc. (evtl. kleines beispiel skript?) ?

ODER

Ist es sinnvoller Python als mod_python einzubinden?
Wenn ja was muss ich hier beachten? Kann ich python ganz normal verwenden (als ob ich ein temrinal programm schreibe nur mit print("<html>"); oder muss ich "anders" programmieren? Was ist zu beachten, etc.?

Als letzes noch:

Ich war natürlich nicht untätig und habe mod_python versucht zu installieren.

Der verwendet Server benutzt Debian 3. Ich habe Apache 2 mit mod_python 3.x und apache 1 mit mod_python 2.x probiert, beides lief nicht.
Fehler traten beim kompilieren und installieren des mods auf, zum konfigurieren von apache kam ich nichtmal....

Habe alles nach der Anleitung von mod_python gemacht... fehlanzeige...

Python 2.2.2 hatte ich davor noch neu insstalliert (nicht per apt-get; sondern from the scratch) der befehl python startete auch python 2.2.2

Ich bin für jede Antwort dankbar!!!
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

hulahub hat geschrieben:Ich bin für jede Antwort dankbar!!!
Na, wenn es so ist ... ;-)

Bei meinem Kenntnisstand (der nicht wirklich gut ist) würd' ich sagen, bleib bei PHP. Für einen Python-Programmierer ist es sicherlich schön, dass er auch das CGI mit Python ansprechen kann, aber bei mehrjähriger PHP-Erfahrung halte ich einen Umstieg für nicht sinnvoll. Ist da nicht eine neue PHP-Version im Anrollen? Vielleicht wird es da ja mit der OOP besser (reine Spekulation meinerseits).
Zur Frage "mod_python: ja oder nein" ist vielleicht der folgende Beitrag aus der dt. Python-ML interessant:
http://starship.python.net/pipermail/py ... 04806.html

HTH, aber ich hoffe, es kommen noch andere Stimmen und Meinungen zu Thema.
Jan
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Also ich persönlich benutze für Internetdinge ausschliesslich PHP, hier und da mal was in Perl.

Das fehlende OOP bei PHP (ich es hat Klasse, aber es ist nicht sooo genial gelöst) stört mich auch ein wenig, aber ich warte auch die neue Version, die ja im Jahre 2003 irgentwann kommen soll (php5)

Python hingegen setze ich als Scriptsprache für Serverdinge mal ganz gerne ein, und für Prototypes.

Aber auch ich würde es begrüssen, wenn Python mächtiger in sachen CGI/Internet werden würde, muss aber gestehen ich habe es noch nie versucht :)
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Wenn du schon so viel Erfahrung mit PHP hast, rat ich dir auch dabei zu bleiben. Ansonsten kann ich dir mit CGI nen bissl was zeigen...
hulahub hat geschrieben:Wenn ja was muss ich hier beachten? Kann ich python ganz normal verwenden (als ob ich ein temrinal programm schreibe nur mit print("<html>"); oder muss ich "anders" programmieren? Was ist zu beachten, etc.?
du sprichst es ganz genau an, so läuft das bei den HTML-Ausgaben ab. Am besten am Beispiel (musste ich mal für die Schule machen)

hier der Quelltext des Scriptes:

Code: Alles auswählen

#!/usr/bin/python
print "Content-type: text/html\n\n"
import cgi,cgitb
cgitb.enable()

from patternmatching import match
form=cgi.FieldStorage()
text=form.getvalue("text","")
muster=form.getvalue("muster","")

print"""<html>
<head>
<title>Pattern Matching Suchtest</title>
<meta name="author" content="Milan">
<meta name="generator" content="Ulli Meybohms HTML EDITOR">
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000" background="http://www.pythonarea.de/images/sand.jpg" bgproperties="fixed">
<h3 align="center">Hier kannst du das Suchscript Testen:</h3>
<br>
<br>
<form action="patternmatching.pl" method="POST">
<table align="center">
 <tr>
  <td><h4 align="center">Suchtext</h4></td>
  <td><h4 align="center">Suchmuster</h4></td>
 </tr>
 <tr>
  <td><input type="Text" name="text" value="%s" size="30" maxlength=""></td>
  <td><input type="Text" name="muster" value="%s" size="30" maxlength=""></td>
 </tr>
</table>
<br>
<div align="center"><input type="Submit" name="suchen" value="Und los..."></div>
</form>
<br>
<br>
<h4 align="center">Das Ergebnis sind die Anfangszeichen im Text (als Zahlen).
<br>Dein aktuelles Ergebnis war: %s</h4>
</body>
</html>"""%(text,muster,str(match(text,muster)))
als erstes kommt ein "#!/usr/bin/python" für den Suchpfad zum Interpreter.
Dann das print "Content-type: text/html\n\n" um dem Browser die Ausgabe zu sagen, es kommt also HTML raus. Mit print Anweisungen lässt du HTML ausgeben.
Mit dem modul cgi kannst du Forumlare auslesen, das ist ein wenig komplizierter...
und mit import-Anweisungen kannst du auch selbstgeschriebene Module Importieren.

Ich weiß, das ist jetzt sehr knapp erklärt, aber mir mangelt es leider gerade an Zeit. Ich komm später noch mal, und machs ausführlicher, falls mir das nicht jemand in der Zeit abnimmt.
Zuletzt geändert von Milan am Mittwoch 8. Januar 2003, 13:29, insgesamt 1-mal geändert.
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Code: Alles auswählen

<form action="patternmatching.pl" method="POST">
Das finde ich sehr cool :) Ein Pythonscript, das eine HTML-Seite erstellt um ein Perlmodul mittels Formular anzusprechen :)

Sorry, aber das konnte ich mir nicht verkneifen ....
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

tja, der Server kann nur von den Endungen her erkennen, ob ein Script als CGI ausgeführt wird oder nicht (FAQ). Da wurde die Endung von Perl zweckentfremdet und komischerweise Funktioniert die endung cgi nicht, obwohl sie auch als gültig angegeben wird. Ansonsten hast du recht, ist sehr kompliziert für was einfaches :wink: :lol: . Als wir das in der Schule machen sollten, haben wir gerade Module gehabt und mussten deshalb die eine Funktion importieren.

@hulahub:

form=cgi.FieldStorage()
text=form.getvalue("text","")
muster=form.getvalue("muster","")

ich hol mir aus eventuell übergebenen Formular die Daten der Felder text und muster raus, falls sie nicht vorhanden sind wird mit nem leerem String initialisiert. Ansonsten wird immer die gleiche Routine gefahren, es wird gesucht und das Ergebnis angezeigt...
hulahub

Ersmtal danke, wusste garnciht das die Community so lebt... gleich mal Anmelden :)

Naja, PHP5 wird nach meinen Vemrutungen erst ende 2003 kommen... Es gibt zwar schon die ZendEngine 2, wleche alle OOP verbesserungen mti sich bringt aber sogar bei mir(!) instabil läuft. Ausserdem ist es natürlich auch der drang ganz nebebei ne sprache zu lernen mit der man auch mal realtime consolen applicationen schrieben kann.

Zu letzt gefällt mir der wirklich saubere code von python... so kann fast jeder entwickler das lesen.. bei PHP war das nicht immer so... und bei gemeinschaftsprojekten.. jeder PHP entwickler codet anders.. sTandards festlegen ist langwierig und kompliziert, von daher codet man php lieber ganz allein... Python is der Syntax und code schon allein durch IDLE fast überall gleich...

Aber eine Frage wurde mir noch garned beantwortet / drauf eingegangen, und zwar mod_python -> CGI...

Die hauptfrage ist erfordert mod_python anderen code oder kann man ganz normal Python coden und dann ins web laden? Und das is dann ne Webseite... ?????

Achja wollte noch erwähnen... es ist keinenfalls für kleine Projekte... es sind grosse aufwendige Programme welche ständig erweitert werden müssen. für was kleines bleib ich natürlcih beim "schnell mach mal dreckig" -> PHP


also vielen dank shconmal für eure zahlreichen antowrten!
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Die hauptfrage ist erfordert mod_python anderen code oder kann man ganz normal Python coden und dann ins web laden? Und das is dann ne Webseite... ?????
Bei mod_python ist es, so denke ich, wie bei mod_perl. Du kannst ganz normal PYthon Code programmieren, und die Ausgabe wird auf dem Browser sein, daher braucht man den Content-Type: text/html, nur bei Zope, soweit ich weiss, ist der PYthonbefehlssatz reduziert.

@MILAN:
tja, der Server kann nur von den Endungen her erkennen, ob ein Script als CGI ausgeführt wird oder nicht (FAQ). Da wurde die Endung von Perl zweckentfremdet und komischerweise Funktioniert die endung cgi nicht, obwohl sie auch als gültig angegeben wird.
Klingt sehr nach falscher Einstellung/Konfiguration des Apachen! Du musst die Mimetypes setzen. Wenn er Cgi nicht kennt, führt der Server es nicht aus. Und .pl für python zu benutzen ist extrem unsauber, denn falls jemand dein Skript auf einem Windows-Server einsetzen möchte, wird der/die/das SHEBANG (#!usr/bin/iregentwas) nicht ausgelesen, sondern es kommt auf die Endung an.

Aber solange es auf einem eigenen Server läuft, wo man weiss was passiert (-> man merkt, Windows wird hier ausgeschlossen :D) ist es kein Problem.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
bbadm
User
Beiträge: 7
Registriert: Mittwoch 7. August 2002, 10:37

Ich habe sehr gute Erfahrungen mit mod_python und 'spyce' als Erweiterung gemacht.
Direkt ein mod_python script zu schreiben, empfinde ich als unakzeptabel (wg. Trennung von Design und Programmierung etc.)
Spyce als Erweiterung erlaubt Dir, ganz einfach in eine HTML-Seite Python Code einzufügen, der dann beim Abruf ausgeführt wird.
Wirklich ein klasse Tool...

Zu Deinem Kompilierungs-Problem: Da Deine Fehlerangaben nicht allzu ausführlich sind ;-) , kann ich nur von meinen berichten:
Nach dem Kompilieren und Einbinden von mod_python in einen apache 1.3.27 liess sich dieser nicht mehr starten mit der Meldung, es gäbe eine Fehler in der mod_python.so: 'undefined symbol: openpty'.
Wenn das auch Dein Fehler ist, ist die Lösung ganz einfach: Füge in der mod_python-Datei src/Makefile bei LIBS ein '-lutil' hinzu. Nach dem Neubraten funktioniert's dann.

Gruß bbadm

BTW: Das Wundertool "Spyce" findest Du übrigens unter http://spyce.sourceforge.net/
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Spyce sieht nach einer recht brauchbaren und mächtigen Sache aus. Habe jetzt nur schnell drüber geschaut, aber muss man da immer Code einbinden? Oder kann man auch Variablen in ein HTML-Template parsen? Denn das ist nach meiner Erfahrung nach, die einzigst wahre möglichkeit Design und Programmierung strikt zu trennen.

In PHP arbeite ich mit der Klase patTemplate von http://www.phptools.de

Bisher wurden bei mir 95% aller Projekte die ich beruflich erstellen musste mit Templates und Code-Trennung durchgeführt. Alles andere ist kaum Wartbar.

ABER: Das ist meine Meinung :)
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
bbadm
User
Beiträge: 7
Registriert: Mittwoch 7. August 2002, 10:37

Grundsätzlich arbeitet man mit Spyce wohl ähnlich, wie mit 'normalen' PHP Scriptseiten. Code einbinden, APIs aufrufen, Variablen befüllen, und dann die Werte auf den Seiten verteilen ;-)
Spyce ist mir insofern sympatisch, da ich weiterhin Python Code schreiben kann, und trotzdem recht performant Seiten ausliefern kann.
Seit dem 1.3.x-Release kommt eine schicke Tag-API dazu, mit der man recht einfach eigene Tag-Strukturen entwickeln kann, die dann einfach nur in die Seite eingefügt werden.
Zur Zeit arbeite ich an einer kleinen Tag-Bibliothek zur einfachen XML/XSL-Translation innerhalb einer Seite, um damit z.B. eine einfache Schnittstelle zu Fremdsystemen zu haben, die mir irgendwelche Daten in XML liefern können (z.B. via XMl-RPC, Anbindung an Xindice usw.).
Dafür scheint mir diese Spyce-Tag-Architektur einfach sehr gut geeignet.
(Und wenn ich mein 4Suite/mod_python-Problem irgendwie gelöst kriege, kann's auch richtig losgehen ;-)
Jens

Wenn Du Spyce einsetzt wuerde mich mal interessieren welchen Editor Du verwendest?

Ich moechte eine Webanwendung mit Python schreiben und hatte zunaechst Quixote
als Bibliothek ins Auge gefasst. Da ist die Sache mit dem Editor, oder besser dem
gewuenschten Highlightning kein Problem, weil alles den Regeln von Python-Code folgt.
Nun krieg ich aber einige Sachen mit Quixote einfach nicht zum Laufen (vor allem persistente
Variablen und Sessions) und da bin ich auf Spyce gestossen, da funktioniert sowas in einer
Form das auch ich es hinbekomme. Nur das Editieren ist halt etwas muehsam, weil alle
mir bekannten brauchbaren Editoren nur entweder HTML oder Python formatieren. Gibt
es einen dem man eine Formatumschaltung im Quelltext beibringen kann (ohne jetzt gleich
Lisp zu lernen)?

Jens
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Was meinst du mit editor. Ich benutze auch spyce und benutze SciTE.
Kann mir jemand sagen was FastCGI fuer eine Lizenz hat dass es bei debian unter non-free ist?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Jens

>Was meinst du mit editor. Ich benutze auch spyce und benutze SciTE.
Genau sowas, nur halt mit einem gut funktionierenden Highlighting. Ich benutze
im Moment Kate und da klappt das nicht so toll.Entweder er faerbt nach HTML-
Regeln oder nach Python-Regeln was beides nicht sehr hilfreich ist. Was ich mir
vielleicht noch wuenschen wuerde waeren Tabs fuer verschiedene Dateien um
bei vielen offenen Dateien nicht endlos Fenster zu schieben und halbwegs gaengige
Tastenkodes fuer Ausschneiden/Einfuegen (bin kein vi-Fan). Bisher hab ich da leider
nichts passendes gefunden.

Jens
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Jens,

schau Dir mal Glimmer an, der kann tabs und auch Syntakhighlighting, zwar nicht in Kombination von Python und HTML, aber das kann man ihm mit Python beibringen.


Gruß

Dookie
Jens Meyer

@Dookie

Danke fuer den Tip, hab ihn vorhin mal schnell runtergeladen und ausprobiert, da
gabs dann aber noch irgendwelche Probleme:

>Could not find platform independent libraries <prefix>
>Could not find platform dependent libraries <exec_prefix>
>Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
>'import exceptions' failed; use -v for traceback
>Warning! Falling back to string-based exceptions
>'import site' failed; use -v for traceback
>Fatal Python error: could not import _gtk

Werde wohl in den naechsten Tagen nochmal Anlauf nehmen wenn ich etwas
Zeit dafuer habe.

Jens
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, glimmer hab ich auch versucht, war aber fuer meine alte kiste zu "ueberfressen".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
xturbo77
User
Beiträge: 39
Registriert: Montag 9. September 2002, 20:05
Kontaktdaten:

Du könntest dir in dem Zusammenhang auch mal HTMLgen anschauen. Sehr leicht anzuwenden und man hat keine unnötigen html tags in seinem Quellcode.

Quelle: http://starship.python.net/lib.html
Jens Meyer

Hat jemand einen Tip wie ich in Spyce in Abhaengigkeit von einer
Python-Variable eine andere Datei statisch include? Statisch deshalb,
weil der aktuelle Kontext erhalten bleiben soll. Es soll auf Funktionen
aus dem aktuellen Kontext zugegriffen werden und das funktioniert bei
meiner bisherigen Loesung mit einem dynamischen Include nicht:

<%\
def ErzeugeTabellendaten():
#blabla
#

if (NutzerDarfTabelleSehen == True):
result=include.spyce('RendereTabelle.spi', {})
.%>

Jens
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

speichers in ner datei oder datenbank oder uebergib es als parameter.
am besten waers wohl, die variablen in sessions zu speichern (frag mich nciht wie das geht, hab eben erst meinen apache eingerichtet, dass er spyce mag :))

die scripts zum erstellen der seiten werden bei jedem zugriff neu gestartet, also existieren auch keine variablen mehr nach beenden der seitengenerierung.

auf bald
oenone
Antworten