Seite 1 von 3

Dynamische Webseite auf Basis von Python

Verfasst: Mo Jun 02, 2014 9:54 pm
von chrash
Hallo,

ich brauche eure Hilfe beim lösen meiner Semsteraufgabe... wir sollen eine Dynamische Webseite erstellen mit folgennden Aufgaben:
  1. -Verwenden Sie Python in der Version 3 (eigener Laptop).

    -Erstellen Sie ein HTML-Formular, mit dem Daten eingelesen und an einen Web-Server gesendet werden können. Dieser soll als Antwort eine dynamisch von einem Python-Skript erzeugte HTML-Seite zurücksenden, die im Browser angezeigt wird.

    -Aufruf des Python-Skriptes als CGI-Skript (Dabei sind mindestens zwei Parameter via http an das Python-Skript zu übergeben).

    -Das Python-Skript generiert valides HTML

    -Formatierung durch CSS
Ich habe mir gedacht ich schreibe einfach einen Sternzeichen-Rechner
Das HTML Formular habe ich schon :

Code: Alles auswählen

<html>
<head><title>Sternzeichen-Rechner</title></head>
<body>
 
  

<div style="background-image:url(background2.gif); margin:0px; padding:10px">
<h1 style="text-align:center;color:#FFFFCC">Sternzeichen-Rechner!</h1>

<div style="background-image:url(background3.jpg); margin:30px; padding:10px">
<h2 style="text-align:center;color:#804000">Sternzeichen-Rechner!</h2>

</div></div>

  <div style="text-indent:500px;"><p> Geben Sie ein Geburtsdatum ein, </p></div>
  <div style="text-indent:500px;"><p> der Rechner ermittelt dann Ihr Sternzeichen.</p></div>
 
 
  <form method="post" action="../cgi-bin/cgi_formular_auswertung.cgi" target="_blank">
<div style="text-indent:500px;">
<select name='day' id='day'>
<option value='1'> 1</option>
<option value='2'> 2</option>
<option value='3'> 3</option>
<option value='4'> 4</option>
<option value='5'> 5</option>
<option value='6'> 6</option>
<option value='7'> 7</option>
<option value='8'> 8</option>
<option value='9'> 9</option>
<option value='10'> 10</option>
<option value='11'> 11</option>
<option value='12'> 12</option>
<option value='13'> 13</option>
<option value='14'> 14</option>
<option value='15'> 15</option>
<option value='16'> 16</option>
<option value='17'> 17</option>
<option value='18'> 18</option>
<option value='19'> 19</option>
<option value='20'> 20</option>
<option value='21'> 21</option>
<option value='22'> 22</option>
<option value='23'> 23</option>
<option value='24'> 24</option>
<option value='25'> 25</option>
<option value='26'> 26</option>
<option value='27'> 27</option>
<option value='28'> 28</option>
<option value='29'> 29</option>
<option value='30'> 30</option>
<option value='31'> 31</option>
</select>
<select name='month' id='month'>
<option value='1' selected= 'selected'> Januar</option>
<option value='2'> Februar</option>
<option value='3'> M&auml;rz</option>
<option value='4'> April</option>
<option value='5'> Mai</option>
<option value='6'> Juni</option>
<option value='7'> Juli</option>
<option value='8'> August</option>
<option value='9'> September</option>
<option value='10'> Oktober</option>
<option value='11'> November</option>
<option value='12'> Dezember</option>
</select>
<select name='year' id='year'>
<option value='1901'> 1901</option>
<option value='1902'> 1902</option>
<option value='1903'> 1903</option>
<option value='1904'> 1904</option>
<option value='1905'> 1905</option>
<option value='1906'> 1906</option>
<option value='1907'> 1907</option>
<option value='1908'> 1908</option>
<option value='1909'> 1909</option>
<option value='1910'> 1910</option>
<option value='1911'> 1911</option>
<option value='1912'> 1912</option>
<option value='1913'> 1913</option>
<option value='1914'> 1914</option>
<option value='1915'> 1915</option>
<option value='1916'> 1916</option>
<option value='1917'> 1917</option>
<option value='1918'> 1918</option>
<option value='1919'> 1919</option>
<option value='1920'> 1920</option>
<option value='1921'> 1921</option>
<option value='1922'> 1922</option>
<option value='1923'> 1923</option>
<option value='1924'> 1924</option>
<option value='1925'> 1925</option>
<option value='1926'> 1926</option>
<option value='1927'> 1927</option>
<option value='1928'> 1928</option>
<option value='1929'> 1929</option>
<option value='1930'> 1930</option>
<option value='1931'> 1931</option>
<option value='1932'> 1932</option>
<option value='1933'> 1933</option>
<option value='1934'> 1934</option>
<option value='1935'> 1935</option>
<option value='1936'> 1936</option>
<option value='1937'> 1937</option>
<option value='1938'> 1938</option>
<option value='1939'> 1939</option>
<option value='1940'> 1940</option>
<option value='1941'> 1941</option>
<option value='1942'> 1942</option>
<option value='1943'> 1943</option>
<option value='1944'> 1944</option>
<option value='1945'> 1945</option>
<option value='1946'> 1946</option>
<option value='1947'> 1947</option>
<option value='1948'> 1948</option>
<option value='1949'> 1949</option>
<option value='1950'> 1950</option>
<option value='1951'> 1951</option>
<option value='1952'> 1952</option>
<option value='1953'> 1953</option>
<option value='1954'> 1954</option>
<option value='1955'> 1955</option>
<option value='1956'> 1956</option>
<option value='1957'> 1957</option>
<option value='1958'> 1958</option>
<option value='1959'> 1959</option>
<option value='1960'> 1960</option>
<option value='1961'> 1961</option>
<option value='1962'> 1962</option>
<option value='1963'> 1963</option>
<option value='1964'> 1964</option>
<option value='1965'> 1965</option>
<option value='1966'> 1966</option>
<option value='1967'> 1967</option>
<option value='1968'> 1968</option>
<option value='1969'> 1969</option>
<option value='1970'> 1970</option>
<option value='1971'> 1971</option>
<option value='1972'> 1972</option>
<option value='1973'> 1973</option>
<option value='1974'> 1974</option>
<option value='1975'> 1975</option>
<option value='1976'> 1976</option>
<option value='1977'> 1977</option>
<option value='1978'> 1978</option>
<option value='1979'> 1979</option>
<option value='1980'> 1980</option>
<option value='1981'> 1981</option>
<option value='1982'> 1982</option>
<option value='1983'> 1983</option>
<option value='1984'> 1984</option>
<option value='1985'> 1985</option>
<option value='1986'> 1986</option>
<option value='1987'> 1987</option>
<option value='1988'> 1988</option>
<option value='1989'> 1989</option>
<option value='1990'> 1990</option>
<option value='1991'> 1991</option>
<option value='1992'> 1992</option>
<option value='1993'> 1993</option>
<option value='1994'> 1994</option>
<option value='1995'> 1995</option>
<option value='1996'> 1996</option>
<option value='1997'> 1997</option>
<option value='1998'> 1998</option>
<option value='1999'> 1999</option>
<option value='2000'> 2000</option>
<option value='2001'> 2001</option>
<option value='2002'> 2002</option>
<option value='2003'> 2003</option>
<option value='2004'> 2004</option>
<option value='2005'> 2005</option>
<option value='2006'> 2006</option>
<option value='2007'> 2007</option>
<option value='2008'> 2008</option>
<option value='2009'> 2009</option>
<option value='2010'> 2010</option>
<option value='2011'> 2011</option>
<option value='2012'> 2012</option>
<option value='2013'> 2013</option>
<option value='2014'selected='selected'> 2014</option>
<option value='2015'> 2015</option>
<option value='2016'> 2016</option>
<option value='2017'> 2017</option>
<option value='2018'> 2018</option>
<option value='2019'> 2019</option>
<option value='2020'> 2020</option>
</select>
<input type="submit" value="Ermitteln" /></div>


            
  </form>
 
</body> 
</html>
Und hier das noch nicht fertige CGI Skript auf Basis von Python3.4

Code: Alles auswählen

#!/Applications/Python 3.4 
#-*- coding: utf-8 -*-

import cgi
 

print("Content-type: text/html; charset=UTF-8")
print("<html><head><title>Sternzeichen-Rechner</title></head><body>"
print("<h1>Dein Sternzeichen ist:</h1>")
print("</body> </html>")      
 
#form=cgi.FieldStorage()
#s1=form["day"].value
#s2=form["month"].value
#s3=form["year"].value
Nun zu meinen Problem, ich führe das ganze über XAMPP aus aber die html Datei kann die CGI Datei nicht ausführen findet sie aber schon. Und ja ich weiß das noch nichts zu den Sternzeichen-Rechner drin steht aber ich möchte erstmal eine einfache Ausgabe wie nur die Ausgabe : "Dein Sternzeichen ist:" haben damit ich weiß das das schon mal funktioniert. Mein Professor meinte das es wahrscheinlich schon an meiner ersten Zeile im CGI Skript liegt das ich den Dateipfad nicht richtig angegeben habe , er konnte mir da aber nicht genau helfen da er sich mit Macs nicht gut auskennt.

MFG

Re: Dynamische Webseite auf Basis von Python

Verfasst: Di Jun 03, 2014 6:35 am
von xerion21
Nun zu meinen Problem, ich führe das ganze über XAMPP aus aber die html Datei kann die CGI Datei nicht ausführen findet sie aber schon. Und ja ich weiß das noch nichts zu den Sternzeichen-Rechner drin steht aber ich möchte erstmal eine einfache Ausgabe wie nur die Ausgabe : "Dein Sternzeichen ist:" haben damit ich weiß das das schon mal funktioniert. Mein Professor meinte das es wahrscheinlich schon an meiner ersten Zeile im CGI Skript liegt das ich den Dateipfad nicht richtig angegeben habe , er konnte mir da aber nicht genau helfen da er sich mit Macs nicht gut auskennt.
Leider kenne ich mich mit Macs auch nicht sonderlich aus, daher kann ich dir den genauen Pfad auch nicht nennen. Aber es wird definitiv an dieser Zeile liegen, da es bei mir (wenn ich die 1. Zeile ändere zu dem Pfad auf meinem Windows-Rechner) funktioniert.

Vielleicht heißt es bei Mac nicht Python 3.4 sondern Python?

Re: Dynamische Webseite auf Basis von Python

Verfasst: Di Jun 03, 2014 9:02 am
von xerion21
werden unter MacOS nicht Pfadangaben mit einem ":" angegeben?

Re: Dynamische Webseite auf Basis von Python

Verfasst: Di Jun 03, 2014 10:09 am
von Xin
chrash hat geschrieben:

Code: Alles auswählen

#!/Applications/Python 3.4 
ich möchte erstmal eine einfache Ausgabe wie nur die Ausgabe : "Dein Sternzeichen ist:" haben damit ich weiß das das schon mal funktioniert. Mein Professor meinte das es wahrscheinlich schon an meiner ersten Zeile im CGI Skript liegt das ich den Dateipfad nicht richtig angegeben habe , er konnte mir da aber nicht genau helfen da er sich mit Macs nicht gut auskennt.
Moin - ich habe gerade keinen Mac hier, aber vom ':' beim Mac als Trennsymbol habe auch mal gehört. Damals... ich habe seit 5 Jahren Macs, alle mit MacOS X und da ist ein BSD drunter - das Trennsymbol ist hier auch '/'.

Trotzdem glaube ich, dass Dein Prof recht hat.
/Applications/Python 3.4 sieht für mich nach einem Ordner aus, denn der Python-Interpreter wird kaum in in Applications liegen und "Python 3.4" heißen. Zumal ich hier gucken würde, was mit dem Leerzeichen stattfindet.

Mach eine Shell auf und gib mal "which python" ein. Den Pfad überträgst Du hinter #!

Re: Dynamische Webseite auf Basis von Python

Verfasst: Mi Jun 04, 2014 9:36 am
von chrash
Mach eine Shell auf und gib mal "which python" ein. Den Pfad überträgst Du hinter #!
Habe ich gemacht es kam /usr/bin/python , das habe ich dann hinter "#!" geschrieben aber es funktioniert immer noch nicht :/

Re: Dynamische Webseite auf Basis von Python

Verfasst: Mi Jun 04, 2014 9:46 am
von Xin
chrash hat geschrieben:
Mach eine Shell auf und gib mal "which python" ein. Den Pfad überträgst Du hinter #!
Habe ich gemacht es kam /usr/bin/python , das habe ich dann hinter "#!" geschrieben aber es funktioniert immer noch nicht :/
Ist die Datei ausführbar?

Code: Alles auswählen

chmod +x <dateiname>

Re: Dynamische Webseite auf Basis von Python

Verfasst: Mi Jun 04, 2014 9:51 am
von chrash
Habe ich gerade im Terminal gemacht und nochmal versucht. Das kam als Fehlermeldung :
Serverfehler!

Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.

Fehlermeldung:
malformed header from script 'cgi_formular_auswertung.cgi': Bad header: <html><head><title>Sternzeiche

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.

Edit: Ich habe mein CGI Skript jetzt so umgeschrieben :

Code: Alles auswählen

#!/usr/bin/python
#-*- coding: utf-8 -*-

import cgi
 

print("Content-type: text/html; charset=UTF-8")
print("<html><head><title>Sternzeichen-Rechner</title></head><body><h1>Dein Sternzeichen ist:</h1></body></html>")

      
 
#form=cgi.FieldStorage()
#s1=form["day"].value
#s2=form["month"].value
#s3=form["year"].value
Und nun kommt diese Fehlermeldung :
Premature end of script headers: cgi_formular_auswertung.cgi

Re: Dynamische Webseite auf Basis von Python

Verfasst: Mi Jun 04, 2014 10:02 am
von Xin
chrash hat geschrieben:Habe ich gerade im Terminal gemacht und nochmal versucht. Das kam als Fehlermeldung :
Serverfehler!

Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.

Fehlermeldung:
malformed header from script 'cgi_formular_auswertung.cgi': Bad header: <html><head><title>Sternzeiche
Jow, damit läuft das Skript auf jeden Fall schonmal, denn das Sternzeichen kommt an.
chrash hat geschrieben:Edit: Ich habe mein CGI Skript jetzt so umgeschrieben :
Ja, das geht schon in die richtige Richtung. Ändere diese Zeile mal:

Code: Alles auswählen

...
print("Content-type: text/html; charset=UTF-8\n\n")   # <- Zwei Leerzeilen hinzugefügt

Re: Dynamische Webseite auf Basis von Python

Verfasst: Mi Jun 04, 2014 10:06 am
von chrash
Es hat funktioniert super danke , jetzt kann ich den rest fertig machen danke danke :)

Re: Dynamische Webseite auf Basis von Python

Verfasst: Do Jun 05, 2014 10:54 pm
von chrash
Ich brauche nochmal etwas Hilfe von euch :)
Da ich mich nicht gut mit Python auskenne da wir nur mit Java arbeiten , würde ich mich freuen wenn ihr mal über meinen Code gucken könnt ob das so geht :

Code: Alles auswählen

#!/usr/bin/python
#-*- coding: utf-8 -*-

import cgi
 

print("Content-type: text/html; charset=UTF-8\n\n")
print("<html><head><title>Sternzeichen-Rechner</title></head><body><h1>Dein Sternzeichen ist:</h1></body></html>")

      
 
form=cgi.FieldStorage()
s1=form["day"].value
s2=form["month"].value
s3=form["year"].value
if s1>=21 && s2=3:
    print("<html><body><p>Widder</p></body></html>")
    if s1<=20 && s2=4:
        print("<html><body><p>Widder</p></body></html>")
if s1>=21 && s2=4:
    print("<html><body><p>Stier</p></body></html>")
    if s1<=20 && s2=5:
        print("<html><body><p>Stier</p></body></html>")
if s1>=21 && s2=5:
    print("<html><body><p>Zwillinge</p></body></html>")
    if s1<=21 && s2=6:
        print("<html><body><p>Zwillinge</p></body></html>")
if s1>=22 && s2=6:
    print("<html><body><p>Krebs</p></body></html>")
    if s1<=22 && s2=7:
        print("<html><body><p>Krebs</p></body></html>")
if s1>=23 && s2=7:
    print("<html><body><p>Löwe</p></body></html>")
    if s1<=22 && s2=8:
        print("<html><body><p>Löwe</p></body></html>")
if s1>=23 && s2=8:
    print("<html><body><p>Jungfrau</p></body></html>")
    if s1<=23 && s2=9:
        print("<html><body><p>Jungfrau</p></body></html>")
if s1>=24 && s2=9:
    print("<html><body><p>Waage</p></body></html>")
    if s1<=23 && s2=10:
        print("<html><body><p>Waage</p></body></html>")
if s1>=24 && s2=10:
    print("<html><body><p>Skorpion</p></body></html>")
    if s1<=22 && s2=11:
        print("<html><body><p>Skorpion</p></body></html>")
if s1>=23 && s2=11:
    print("<html><body><p>Schütze</p></body></html>")
    if s1<=21 && s2=12:
        print("<html><body><p>Schütze</p></body></html>")
if s1>=22 && s2=12:
    print("<html><body><p>Steinbock</p></body></html>")
    if s1<=20 && s2=1:
        print("<html><body><p>Steinbock</p></body></html>")
if s1>=21 && s2=1:
    print("<html><body><p>Wassermann</p></body></html>")
    if s1<=18 && s2=2:
        print("<html><body><p>Wassermann</p></body></html>")
if s1>=19 && s2=2:
    print("<html><body><p>Fisch</p></body></html>")
    if s1<=20 && s2=3:
        print("<html><body><p>Fisch</p></body></html>")
Am Html Skript hat sich nichts geändert.