BaseHttpServer Problem

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
nubie2001
User
Beiträge: 14
Registriert: Samstag 9. Januar 2010, 19:19

hi hab nen Problem mit dem BaseHttpServer und zwar hat mein Prof mir ne tolle Aufgabe gestellt:

Soll ich ne Raumverteilung erstellen.

Die statischen Webseiten hab ich schon erstellt nur weiß ich jetzt nicht, wie ich die Daten, die ich von den einzelnen Webseiten krieg wieder an die gleiche Webseite schick, um damit zum Beispiel eine Tabelle auf der Seite zu erstellen in der dann Name etc pp stehen.

Als Ausgangspunkt für die Implementierung des Webserver verwenden Sie „post_server.py“. Implementieren Sie die
einzelnen Verarbeitungsmethoden direkt in der do_GET bzw. do_POST – Methode. Übergeben Sie Formulardaten mit der
Methode POST (siehe Codebeispiel zu dieser Aufgabenstellung).

Und hier mal das Code Beispiel:

Code: Alles auswählen

# aus einem Beispiel im Buch "Python Phrasebook" abgeleitet

# Dokumentation zu diesen Klassen siehe Python-Manual !

# geben Sie zum Test im Browser ein:
#   http://localhost:8080/post_form.htm

import os, sys
import BaseHTTPServer, cgi
import cPickle

servAddr = ('',8080)

#Define the HTTP handler that overrides do_POST
class httpServHandler( \
      BaseHTTPServer.BaseHTTPRequestHandler):
      
    def do_GET(self):
        # hier eine naive Implementierung zur Auslieferung
        # statischer Ressourcen
        
        # nachfolgende Zeilen aktivieren, falls
        # GET-Parameter ausgewertet werden sollen
        #if self.path.find('?') != -1:
        #   self.path, self.query_string = \
        #        self.path.split('?', 1)
        #else:
        #   self.query_string = ''
        self.send_response(200)
        self.send_header('Content-type','text/html')
        self.end_headers()
      
        self.wfile.write(file(self.path[1:]).read())
      
    def do_POST(self):
#Get arguments from query string
        self.query_string = self.rfile.read( \
            int(self.headers['Content-Length']))
        self.args = dict(cgi.parse_qsl(self.query_string))

        self.send_response(200)
        self.send_header('Content-type', \
                         'text/html')
        self.end_headers()
        
#Redirect output to browser
        sys.stdout = self.wfile

#Handle the post
        self.wfile.write("<h2>Handling \
           Post</h2>")
        self.wfile.write("<ul><li>Location: \
           <strong>%s</strong></li>"%(self.path))
        self.wfile.write("<li>Arguments: \
           <strong>%s</strong></li></ul><hr>"%(self.args))
#Moeglichkeit 1: Execute the script remotely
#        execfile(self.path, self.args)

#Moeglichkeit 2: direkt verarbeiten
        name  = self.args['Name']
        vorname = self.args['Vorname']
        senden = self.args['senden']
        mitarbeiter = vorname+" "+name
        print "<select name ='mitarbeiter'>"

        if senden and (name and vorname):
                datei = open(r"mitarbeiter.txt","r")
                zeile = datei.readlines()
                datei.close()
                if len(zeile) >= 1:
                    x = 0
                    for n in zeile:
                        print "<option>"+zeile[x]+"</option>"
                        x = x + 1
                else:
                    print "<option>Kein Eintrag</option>"
                print "</select>"
                datei = open("mitarbeiter.txt","a")
                datei.write(mitarbeiter+"\n")
                datei.close()
                
#Set the root directory
os.chdir('htdocs')

#Create server object
serv = BaseHTTPServer.HTTPServer( \
           servAddr, httpServHandler)

#Start Server
serv.serve_forever()
nubie2001
User
Beiträge: 14
Registriert: Samstag 9. Januar 2010, 19:19

Hier mal nen Update kein Plan ob ichs richtig gemacht hab, da man hier ja so viel Hilfe bekommt. Obwohl ich nur ne Frage gestellt habe und net einmal verlangt hatte, dass es jemand komplett macht.

Code: Alles auswählen

# aus einem Beispiel im Buch 'Python Phrasebook' abgeleitet

# Dokumentation zu diesen Klassen siehe Python-Manual !

# geben Sie zum Test im Browser ein:
#   http://localhost:8080/post_form.htm

import os, sys
import BaseHTTPServer, cgi
import cPickle
import shutil

servAddr = ('',8080)

#Define the HTTP handler that overrides do_POST
class httpServHandler( \
      BaseHTTPServer.BaseHTTPRequestHandler):
      
    def do_GET(self):
        # hier eine naive Implementierung zur Auslieferung
        # statischer Ressourcen
        
        # nachfolgende Zeilen aktivieren, falls
        # GET-Parameter ausgewertet werden sollen
        if self.path.find('?') != -1:
            self.path, self.query_string = \
                self.path.split('?', 1)
        else:
            self.query_string = ''
        self.send_response(200)
        self.send_header('Content-type','text/html')
        self.end_headers()
        
        self.wfile.write(self.query_string)
        
        self.wfile.write(file(self.path[1:]).read())
        
        if self.path == '/raumbelegung.html':
            self.wfile.write('''<td align ='center'>
            Von 8 bis 
            <select name ='Zeit'>''')
            for z in range(9,19):
                self.wfile.write('''<option>'''+str(z)+'''</option>''')
            self.wfile.write('''
            </select>
            Uhr
            </td>
            <td align ='center'>
            <select name ='Verantwortlicher'>''')
            
            datei = open(r"mitarbeiter.txt","r")
            zeile = datei.readlines()
            datei.close()
            if len(zeile) >= 1:
                x = 0
                for n in zeile:
                    self.wfile.write('''<option>'''+zeile[x]+'''</option>''')
                    x = x + 1
            else:
                self.wfile.write('''<option>Kein Verantwortlicher vorhanden</option>''')
            self.wfile.write('''</select>
            </td>
            <td align ='center'>
            <select name ='Teilnehmer' multiple size ='5'>''')
            datei = open(r"mitarbeiter.txt","r")
            zeile = datei.readlines()
            datei.close()
            datei1 = open("mitarbeiter_ohne_teil.txt", "r")
            zeile1 = datei1.readlines()
            datei1.close()
            if len(zeile) > len(zeile1):
                if len(zeile1) >= 1:
                    x = 0
                    for n in zeile1:
                        self.wfile.write('''<option>'''+zeile1[x]+'''</option>''')
                        x = x + 1
                else:
                    self.wfile.write('''<option>Keine Teilnehmer vorhanden</option>''')
            else:
                if len(zeile) >= 1:
                    x = 0
                    for n in zeile:
                        self.wfile.write('''<option>'''+zeile[x]+'''</option>''')
                        x = x + 1
            self.wfile.write('''</select>
            </td>
            <tr>
            <td colspan ='2' align ='center'><input type ='submit' name ='senden' value ='abschicken' /></td>
            <td colspan ='2' align ='center'><input type ='reset' name ='rueck' value ='rücksetzen' /></td>
            </tr>
            </tr>
            </body>
            </html>''')
            
        if self.path == '/mitarbeiter.html':
            self.wfile.write('''<div align ="center">
            <select name ="Mitarbeiter" size ="5">''')
            datei = open(r"mitarbeiter.txt","r")
            zeile = datei.readlines()
            datei.close()
            if len(zeile) >= 1:
                x = 0
                for n in zeile:
                    self.wfile.write('''<option>'''+zeile[x]+'''</option>''')
                    x = x + 1
            else:
                self.wfile.write('''<option>Kein Eintrag</option>''')
            self.wfile.write('''</select>
            </div>
            </form>
            </table>
            </body>
            </html>''')                                  
      
    def do_POST(self):
#Get arguments from query string
        self.query_string = self.rfile.read( \
            int(self.headers['Content-Length']))
        self.args = dict(cgi.parse_qsl(self.query_string))

        self.send_response(200)
        self.send_header('Content-type', \
                         'text/html')
        self.end_headers()
        
#Redirect output to browser
        sys.stdout = self.wfile

#Handle the post
        '''self.wfile.write('<h2>Handling \
           Post</h2>')
        self.wfile.write('<ul><li>Location: \
           <strong>%s</strong></li>'%(self.path))
        self.wfile.write('<li>Arguments: \
           <strong>%s</strong></li></ul><hr>'%(self.args))
        #Moeglichkeit 1: Execute the script remotely
        #execfile(self.path, self.args)'''

#Moeglichkeit 2: direkt verarbeiten
        if self.path == '/mitarbeiter.html':
            if len(self.args) == 3:
                name  = self.args['Name']
                vorname = self.args['Vorname']
                senden = self.args['senden']
                
                if senden and (name and vorname):
                    datei = open(r"mitarbeiter.txt","r")
                    zeile = datei.readlines()
                    datei.close()
                    if len(zeile) >= 1:
                        x = 0
                        for n in zeile:
                            x = x + 1
                    datei = open("mitarbeiter.txt","a")
                    datei.write(name+" "+vorname+"\n")
                    datei.close()
                    print "<meta http-equiv='refresh' content='0'; URL=mitarbeiter.html>"
                    
            if len(self.args) == 2:
                loeschen = self.args['l\xc3\xb6schen']
                mitarbeiter = self.args['Mitarbeiter']        
                
                if loeschen and mitarbeiter:
                    datei = open (r"mitarbeiter.txt", "r")
                    zeile = datei.readlines()
                    datei.close()
                    
                    n = 0
                    for x in zeile:
                        zeile[n].split()
                        n = n+1
                        if mitarbeiter in zeile[n-1]:
                            zeile.pop(n-1)
                    datei1 = open (r"mitarbeiter.txt","w")
                    datei1.writelines(zeile)
                    datei1.close()
                    print "<meta http-equiv='refresh' content='0'; URL=mitarbeiter.html>"

                
        if self.path == '/raumbelegung.html':            
                
            if not 'Teilnehmer' in self.args:
                print "<strong><center>Bitte Teilnehmer wählen</center></strong>"
                print "<meta http-equiv='refresh' content='0'; URL=raumbelegung.html>"
            else:
                send = self.args['senden']
                zeit = self.args['Zeit']
                teilnehmer = self.args['Teilnehmer']                
                verantwortlicher = self.args['Verantwortlicher']
                tag = self.args['Tag']
                
                if send and (zeit and tag):
                    if 'Teilnehmer' in self.args:
                        for value in self.args.itervalues():
                            self.wfile.write(value)
                    if teilnehmer == verantwortlicher:
                        shutil.copyfile("mitarbeiter.txt", "mitarbeiter_ohne_teil.txt")
                        datei = open("mitarbeiter_ohne_teil.txt", "r")
                        zeile = datei.readlines()
                        n = 0
                        for x in zeile:
                            zeile[n].split()
                            n = n+1
                            if verantwortlicher in zeile[n-1]:
                                zeile.pop(n-1)
                        datei1 = open (r"mitarbeiter_ohne_teil.txt","w")
                        datei1.writelines(zeile)
                        datei1.close()
                        self.wfile.write('''Verantwortlicher darf nicht Teilnehmer sein''')
                    
                    #print "<meta http-equiv='refresh' content='0'; URL=raumbelegung.html>"

        #else:
         #   print 'test'
                
#Set the root directory
os.chdir('htdocs')

#Create server object
serv = BaseHTTPServer.HTTPServer( \
           servAddr, httpServHandler)

#Start Server
serv.serve_forever()
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Du hast fast alles richtig gemacht, bis auf die Beachtung der folgenden Punkte:
- http://www.python-forum.de/topic-1689.html
- Langer Code gehört nicht ins Forum sondern in ein Pastecode
- Du hast keine Frage gestellt, jedenfalls keine verständliche, die etwas mit Python zu tun hat.
Daraus könnten die spärlichen Antworten resultieren.
Antworten