Seite 1 von 1
Mini Web Framework
Verfasst: Dienstag 21. Februar 2006, 23:50
von Mad-Marty
Hi,
ich möchte mal was mit html versuchen, und brauche dazu einen möglichst kleinen WebFramework.
Im endeffekt muss er blos ein paar tabellen brauchbar anzeigen.
Das ganze bevorzugt gleich mit eigenen webserver.
Rein interessehalber würde mich noch interessieren ob es auch sowas wie
einen Framework zum selbstkonfigurieren diverser komponenten auf einer seite gibt.
Re: Mini Web Framework
Verfasst: Mittwoch 22. Februar 2006, 00:01
von gerold
Mad-Marty hat geschrieben:Im endeffekt muss er blos ein paar tabellen brauchbar anzeigen. Das ganze bevorzugt gleich mit eigenen webserver.
Hi Mad-Marty!
Jens hat sich mal einen kleinen CGI-Server gebastelt. Der könnte genau richtig für dich sein. Siehe
http://www.python-forum.de/viewtopic.php?t=2647
CGI:
http://python.org/doc/2.4.2/lib/module-cgi.html
CGITB:
http://python.org/doc/2.4.2/lib/module-cgitb.html
mfg
Gerold

Verfasst: Mittwoch 22. Februar 2006, 00:20
von gerold
Hi Mad-Marty!
Ich habe dir ein kleines Beispiel zusammen gestellt. Speichere die beiden Skripte in einem gemeinsamen Ordner und starte das Skript "cgi_server.py".
Danach gibst du in deinem Browser die URL "
http://localhost:8081" ein und schon kann es los gehen. (Evt. muss der Port 8081 in der Firewall frei gegeben werden.)
cgi_server.py (von Jens):
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
__version__ = "0.0.7"
__history__ = """
v0.0.7
- subprocess unnötig, da have_fork, have_popen2 und have_popen3 unnötigerweise
auf False im RequestHandler gesetzt wurden. Das bedeutetet das die CGI
Skripte immer mit der Notlösung execfile() ausgeführt wurden.
v0.0.6
- Überschreiben der CGIHTTPServer.execfile() damit Skripte nicht per
execfile() sondern per subprocess ausgeführt werden. Damit alle
"Sub"-Module immer neu geladen werden.
v0.0.5
- os.environ["QUERY_STRING"] wird richtig übergeben
"""
import CGIHTTPServer, SocketServer
import BaseHTTPServer
import os, sys, socket
class MyRequestHandler( CGIHTTPServer.CGIHTTPRequestHandler ):
"""Modifizieren des Standart RequestHandlers"""
def is_cgi(self):
"""
Einfachere Variante, sodas alle Python-Skripte überall ausgeführt werden#
"""
base, filename = os.path.split( self.path )
if ".py" in filename:
if "?" in filename:
os.environ["SCRIPT_FILENAME"] = filename.split("?",1)[0]
else:
os.environ["SCRIPT_FILENAME"] = filename
os.environ['DOCUMENT_ROOT'] = os.getcwd()
self.cgi_info = base, filename
return True
class MyThreadingServer( SocketServer.ThreadingTCPServer ):
"""
Verbesserung des Standart Servers:
- ermöglicht das abarbeiten mehrere Anfragen parallel (z.B. Download mehrere Dateien gleichzeitig)
- Ermöglicht das einschränken des IP-Bereiches aus denen der Server Anfragen behandelt
"""
allow_reuse_address = 1 # Seems to make sense in testing environment
def __init__(self, server_address, request_handler, AllowIPs):
SocketServer.ThreadingTCPServer.__init__(self, server_address, request_handler)
self.AllowIPs = [mask.split('.') for mask in AllowIPs]
def server_bind(self):
"""Override server_bind to store the server name. (Parallele Anfragen)"""
SocketServer.ThreadingTCPServer.server_bind(self)
host, self.server_port = self.socket.getsockname()[:2]
self.server_name = socket.getfqdn(host)
def verify_request(self, dummy, client_address):
"""Checkt ob die IP-Adresse der Anfrage in 'AllowIPs' vorhanden ist"""
def check_ip(mask):
for mask_part, ip_part in zip(mask, ip):
if mask_part != ip_part and mask_part != '*':
return False
return True
ip = client_address[0].split('.')
for mask in self.AllowIPs:
if check_ip(mask):
return True
print "IP [%s] not allowed!" % client_address
return False
def ServerStart( ListenPort, AllowIPs ):
print "="*80
print "ROOT-Pfad .......................:", os.getcwd()
print "Starte CGI-HTTP-Server auf Port .:", ListenPort
print "Zugelassener IP-Bereich .........:", AllowIPs
print
print "Seiten sind nun unter [http://localhost:%s] erreichbar!\n" % ListenPort
httpd = MyThreadingServer( ("", ListenPort), MyRequestHandler, AllowIPs )
httpd.serve_forever()
if __name__=="__main__":
ServerStart(
ListenPort = 8081,
AllowIPs = ('127.0.0.1', '192.168.*.*')
)
erster_test.py:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
print "Content-Type: text/html"
print
import cgi
import cgitb; cgitb.enable()
import time
print \
"""<html>
<head>
<title>Mein erster CGI-Test</title>
</head>
<body>
<table border="1" cellspacing="0" cellpadding="3">
"""
data = (
("Gerold", "Penz"),
("Bernhard", "Winkler"),
("Thomas", "Mustermann"),
)
for row in data:
print " <tr>"
for item in row:
print " <td>%s</td>" % item
print " <td>%s</td>" % time.ctime()
print " </tr>"
print \
"""
</table>
</body>
</html>
"""
mfg
Gerold

Re: Mini Web Framework
Verfasst: Mittwoch 22. Februar 2006, 04:37
von mitsuhiko
Mad-Marty hat geschrieben:Im endeffekt muss er blos ein paar tabellen brauchbar anzeigen.
Das ganze bevorzugt gleich mit eigenen webserver.
Wie wärs mit Colubrid?
http://wsgiarea.pocoo.org/colubrid/
Das dürfte so ca. das sein, was du suchst.
Verfasst: Mittwoch 22. Februar 2006, 21:15
von Mad-Marty
Danke für die vielen Antworten.
Wie ich das sehe kann ich mit Colubrid auch dynamische sachen aus python objekten erzeugen, oder ?
Verfasst: Mittwoch 22. Februar 2006, 22:04
von mitsuhiko
Mad-Marty hat geschrieben:Wie ich das sehe kann ich mit Colubrid auch dynamische sachen aus python objekten erzeugen, oder ?
Unter anderem ja
