mod-python schnuppern

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Montag 30. April 2007, 14:09

Hallo,
ich habe vor einigen Tagen angefangen Python zu lernen und möchte Skripte hauptsächlich für den Gebrauch im Internet erstellen. CGI soll, wie ich gelesen habe, nicht schnell und auch unsicher sein. Deswegen möchte ich mod_python verwenden. Ich habe im Forum bereits gesucht wie die Konfiguration usw. abläuft jedoch nichts gefunden als Aussagen aus denen sich schließen lässt, dass die Programmierung mit mod_python etwas anders abläuft. Was muss ich mit meinen Skripten besonderes anstellen um sie mod_python lauffähig zu machen?
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Montag 30. April 2007, 14:23

Hoi,

vielleicht hilft dir [wiki]Web-Skripte zum Laufen bringen[/wiki]

mod_python ist nicht gut für den Entwicklungsstatus, wenn du es aber sonst verwendest, kann man es gebrauchen. Ich finde persönlich FastCGI besser.
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Montag 30. April 2007, 14:52

So wie ich das verstanden habe muss man also nur das Modul mod_python aus Apache importieren und jede py-datei wird automatisch als mod_python gestartet?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 30. April 2007, 15:31

Hallo Xabyt, willkommen im Forum,
Xabyt hat geschrieben:So wie ich das verstanden habe muss man also nur das Modul mod_python aus Apache importieren und jede py-datei wird automatisch als mod_python gestartet?
Nein. mod_python leitet alle Requests an einen Handler (also eine Funktion in einer Datei) weiter, dann kannst du noch mit Publishern und Server pages spielen wenn du magst.
Aber ein Rat: vergiss mod_python. Wenn du es brauchst, weiß du dass du es brauchst, wenn du denkst das du es brauchst ist es höchstwarscheinlich für dich ungeeignet.
Sieh dir besser die vorhandenen Frameworks an oder fange wirklich estmal mit CGI an.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 30. April 2007, 15:33

Xabyt hat geschrieben:So wie ich das verstanden habe muss man also nur das Modul mod_python aus Apache importieren und jede py-datei wird automatisch als mod_python gestartet?
Hallo Xabyt!

So einfach ist das auch wieder nicht. Zur Zeit geht die Tendenz dazu, niemandem dazu zu raten, es mit "mod_python" zu versuchen. --> Zu viele Nachteile!

Ich glaube, wenn man genug Zeit dafür hat, dann sollte man sich CGI und auch mod_python mal ansehen, bevor man sich ein Webframework raussucht. http://webpython.codepoint.net/ Aber bei mod_python sollte man dann doch nicht bleiben.

Wenn du schnell etwas Kleines mit einem kleinen Framework auf die Beine stellen willst: --> Karrigell http://karrigell.sourceforge.net/

Ansonsten ist derzeit Django eines der angesagten Frameworks, mit dem man sich evt. noch beschäftigen sollte.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Montag 30. April 2007, 15:39

Eine Frage, was benutzt eigentlich Google (die benutzen ja Python), CGI oder mod_python oder etwas anderes? Und nebenbei: Ich habe derzeit (ich bin ja Anfänger) sehr viele Fragen, die mir das Buch das ich zum lernen verwende (OOP mit Python von mitp) nicht beantworten kann. Es sind meistens kleinere Fragen wie z.B. wie man in Python die URL nach einer GET-variable durchsucht, aber ich möchte nicht für sowas kleines einen neuen Thread eröffnen. wie soll ich das handlen?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 30. April 2007, 15:51

Xabyt hat geschrieben:Eine Frage, was benutzt eigentlich Google (die benutzen ja Python), CGI oder mod_python oder etwas anderes?
Nichts von alledem. Ich tippe mal, dass das Frontend von C-Programmen generiert wird. Python-Sachen laufen bei Google hauptsächlich für geschäftsinterne Sachen (also sowas wie Guido zum Beispiel programmiert, was auch immer das nochmal war).
Xabyt hat geschrieben:Es sind meistens kleinere Fragen wie z.B. wie man in Python die URL nach einer GET-variable durchsucht, aber ich möchte nicht für sowas kleines einen neuen Thread eröffnen. wie soll ich das handlen?
Selbst probieren, Suchfunktion benutzen, Suchmaschine benutzen, einen neuen Thread eröffnen. Diese Reihenfolge scheint mir ganz brauchbar zu sein.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 30. April 2007, 16:06

Xabyt hat geschrieben:Eine Frage, was benutzt eigentlich Google (die benutzen ja Python), CGI oder mod_python oder etwas anderes?
[...]
wie man in Python die URL nach einer GET-variable durchsucht,
Hi Xabyt!

Google benutzt Python hauptsächlich zum Prototyping. Wenn alles läuft, dann werden die Programme nach C oder C++ (das weiß ich jetzt nicht mehr genau) umgeschrieben. Bei denen ist die Geschwindigkeit ja **extrem wichtig**. Deshalb machen die das. Python wird bei Google auch für interne Programme eingesetzt. Der Python-Erfinder (Guido van Rossum) arbeitet inzwischen auch bei Google.

Wie du an die mit GET oder POST übermittelten Daten kommst, das ist von der Technik abhängig die du benutzt. Mit CGI kannst du z.B. mit ``cgi.FieldStorage()`` auf die Feldwerte zugreifen. Das wird aber ziemlich genau in der Doku zu CGI erklärt: http://docs.python.org/lib/module-cgi.html

Bei Karrigell gibt es die Variablen ``QUERY`` und ``HEADERS`` usw., die die Werte enthalten. http://karrigell.sourceforge.net/en/programming.htm

mfg
Gerold
:-)
Zuletzt geändert von gerold am Montag 30. April 2007, 16:12, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Montag 30. April 2007, 16:11

Vielen dank, ich probier alles genannte mal aus.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 30. April 2007, 16:46

CGI kannst du damit recht schnell ausprobieren:
cgiserver.py:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler

server = HTTPServer(("", 8888), CGIHTTPRequestHandler)

print "Der Server horcht unter http://localhost:8888"
server.serve_forever()
Du musst diesen Server in einen Ordner legen, dessen Pfad keine Leerzeichen oder Sonderzeichen enthält. Sonst funktioniert er nicht. Dann musst du im Ordner noch den Unterordner "cgi-bin" anlegen. In diesen Ordner kommen dann die CGI-Programme.

z.B. so etwas:
cgi_info.py

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

print "Content-Type: text/html;charset=iso-8859-1"
print

import cgi
import cgitb; cgitb.enable()

print \
"""<html>
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
  <title>CGI-Informationen</title>
</head>
<body>
"""

# Feldwerte
fs = cgi.FieldStorage()
print "<h3>Feldwerte</h3>"
print fs.list
print

cgi.print_arguments()
cgi.print_directory()
cgi.print_environ()
cgi.print_environ_usage()

import os
print os.environ.get("HTTP_HOST")

print \
"""
</body>
</html>
"""
Anzeigen: --> http://localhost:8888/cgi-bin/cgi_info.py

Code: Alles auswählen

C:\cgitest
    |- cgi-bin
    |    |- cgi_info.py
    |
    |- cgiserver.py
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Montag 30. April 2007, 18:32

Das mit den Getvariablen in Python in der Doku hab ich jedoch nicht gefunden.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 30. April 2007, 22:07

rafael hat geschrieben:mod_python ist nicht gut für den Entwicklungsstatus
Genau. Mal hier lesen: [wiki]FAQ#IchHabeProblemeMitModPython[/wiki]

@gerold: Mal wieder eine saubere, ausführliche Antwort von dir :shock:
Allerdings hättest du dir das sparen können... *kopfeinzieh* denn schau mal hier: [wiki]CGI[/wiki]:lol:
Allerdings hab ich die Verzeichnisstruktur von dir noch ins Wiki gepackt.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 30. April 2007, 22:40

jens hat geschrieben:Allerdings hab ich die Verzeichnisstruktur von dir noch ins Wiki gepackt.
Hi Jens!

Ich habe es noch ein wenig ergänzt.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 30. April 2007, 22:50

Xabyt hat geschrieben:Das mit den Getvariablen in Python in der Doku hab ich jedoch nicht gefunden.
Hi Xabyt!

Wenn du im Browser an eine URL den String "?vorname=Gerold&nachname=Penz" anhängst, dann werden diese Daten an das CGI-Skript übermittelt. Diese kannst du dann mit

Code: Alles auswählen

fs = cgi.FieldStorage()
vorname = fs.getvalue("vorname", "")
nachname = fs.getvalue("nachname", "")
abrufen.

Werden diese Daten nicht in der URL, sondern im Header der Anforderung des Browsers übermittelt, dann spricht man von POST. Im Code ändert sich nichts. Du kommst im CGI-Skript mit ``cgi.FieldStorage()`` an die GET- sowie an die POST-Daten.
Im oben aufgezeigten "cgi_info.py" zeige ich die übermittelten Daten mit ``cgi.FieldStorage().list`` an.

Rufe doch noch mal cgi_info.py auf:
http://localhost:8888/cgi-bin/cgi_info. ... hname=Penz
Ganz oben siehst du, dass jetzt ein "vorname" und ein "nachname" übergeben werden.

Ich habe noch ein paar Beispiele in diesem Zip-Archiv herumliegen: http://gerold.bcom.at/python/python_code/cgi_test.zip

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Xabyt
User
Beiträge: 32
Registriert: Montag 30. April 2007, 14:05

Dienstag 1. Mai 2007, 17:24

Vielen Dank,
und wie kann ich die gesamte URL abfragen? Also praktisch sowas wie: derzeitigeAdresse = currentURL
print "Du befindest dich auf", derzeitigeAdresse

Wie könnte man sowas hinbekommen? Gibt es da was?

Und nochwas: Wie kann ich (python-)Dateien includen? sowas wie in PHP: include('eineseite.php')?

Gruß,
Felix
Antworten