Seite 1 von 1

Wie HTML von CGI/Python trennen?

Verfasst: Montag 20. Juni 2011, 22:03
von mzh
Hallo Leute.
Ein minimales Beispiel:
Diese Form liest zwei Zahlen ein, die die Grenzen eines Intervalls darstellen.

Code: Alles auswählen

<html>
  <head>
      <title>HTML Formatting Example</title>
  </head>
  <body>
      <form name="getValuesForm" action="./getRandomNumber.cgi">
          <h2>Start External Function.</h2>
          Return a random number in the given intervall.<br />
          <p>
          Lower Boundary of the Intervall.<br />
          <input type="text" name="lowerBoundary" value="0"><br />         
          Upper Boundary of the Intervall.<br />
          <input type="text" name="upperBoundary" value="10"><br />
          <input type="submit" name="getRandomNumber" value="Get Random Number">
          </p> 
      </form>  
</body>
</html>
Wenn die Form übermittelt wird erscheint eine neu erstellte Seite, die die beiden Grenzen angibt. Diese wird mit dem CGI Skript erzeugt.

Code: Alles auswählen

#!/usr/bin/python

print "Content-type: text/html\n\n"

import cgi
import cgitb
cgitb.enable()

import random

form = cgi.FieldStorage()

def getRandomNumber(lower, upper):
    return random.randint(lower, upper)

def getPage(lower, upper):
    newPage = ''
    newPage += '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n'
    newPage += '<html>\n'
    newPage += '<head>\n'
    newPage += '<title>Random Number String Formatting HTML Example</title>\n'
    newPage += '</head>\n'
    newPage += '<body>\n'
    newPage += '<h2>Random Number Interval Entered:</h2>\n'
    newPage += 'Lower Intervall Boundary: %s<br />\n'
    newPage += 'Upper Intervall Boundary: %s<br />\n'
    newPage += '</body>\n'
    newPage += '</html>\n'

    return newPage % (lower, upper)

if __name__ == '__main__':
    lower = form['lowerBoundary'].value
    upper = form['upperBoundary'].value
    randomNumber = getRandomNumber(int(lower), int(upper))
    print getPage(lower, upper)
Ich will den HTML Teil in einem separaten .html File haben (bessere Lesbarkeit mit Syntax Highlighting). Wie kann ich dann aber die String-Formatting "Platzhalter" ausfüllen mit den beiden Werten wenn ich die Seite anzeigen möchte?

Re: Wie HTML von CGI/Python trennen?

Verfasst: Montag 20. Juni 2011, 22:08
von .robert
Bootle oder Flask und die entsprechende Template Sprache nutzen...

Re: Wie HTML von CGI/Python trennen?

Verfasst: Montag 20. Juni 2011, 22:32
von mzh
.robert hat geschrieben:Bootle oder Flask und die entsprechende Template Sprache nutzen...
Seh ich das richtig, mit Flask kann ich sozusagen Python innerhalb von HTML ausführen?

Re: Wie HTML von CGI/Python trennen?

Verfasst: Montag 20. Juni 2011, 23:28
von deets
Mit allen Template-Implementierungen kannst du das, ueblicherweise in einem aus guten Gruenden recht beschraenkten Masse - sonst waerst du bei PHP.

Re: Wie HTML von CGI/Python trennen?

Verfasst: Dienstag 21. Juni 2011, 06:31
von noisefloor
Hallo,

wenn du unbedingt bei CGI bleiben willst: Das String-Modul aus Python kennt auch Templates Link.

Aber grundsätzlich fährst du mit WSGI und einen entsprechendem (oben bereits genanntem) Framework besser - nicht nur, weil Bottle, Flask & Co. Template-Engines mitbringen, sondern auch weil das Routing, Handling von Request-Daten etc. komfortabler ist.

Gruß, noisefloor

Re: Wie HTML von CGI/Python trennen?

Verfasst: Dienstag 21. Juni 2011, 09:20
von mzh
Die Übertragung des Programms in ein Framework steht schon lange an. Im Moment müssen noch zwei Funktionen eingeführt werden, damit der Chef zufrieden ist. Dann wird refactoriert.

@Noisefloor: Im Moment muss ich das mit CGI lösen. Danke für den Hinweise auf die Templates, ich schaus mir an.

Re: Wie HTML von CGI/Python trennen?

Verfasst: Dienstag 21. Juni 2011, 09:29
von Hyperion
Man kann Jinja2 und Co. ja auch mit CGI betreiben - man kann sie ja auch außerhalb der Webprogrammierung nuzten. So schwer ist das Setup von J2inja auch nicht.

Da Du da sehr viele form-Elemente hast: Da solltest Du aber mal dringend über Wtforms o.ä. nachdenken.

Re: Wie HTML von CGI/Python trennen?

Verfasst: Dienstag 21. Juni 2011, 15:12
von mzh
nur damit ich es mir ungefähr vorstellen kann, was würde sich denn in meinem obigen Beispiel mit Hilfe eines Frameworks (z.B. Bottle) verändern?

Re: Wie HTML von CGI/Python trennen?

Verfasst: Dienstag 21. Juni 2011, 15:21
von Hyperion
mzh hat geschrieben:nur damit ich es mir ungefähr vorstellen kann, was würde sich denn in meinem obigen Beispiel mit Hilfe eines Frameworks (z.B. Bottle) verändern?
Naja, Du hättest eben ein Template-File und würdest wohl eine Route für Deine `getPage`-Funktion anlegen. (Der Name ist übrigens nicht PEP8 konform)

Am besten schaust Du Dir einfach mal die Doku und das Tutorial zu bottle / flask an.

Re: Wie HTML von CGI/Python trennen?

Verfasst: Dienstag 21. Juni 2011, 15:28
von mzh
hm, wäre generatePage besser?

Re: Wie HTML von CGI/Python trennen?

Verfasst: Dienstag 21. Juni 2011, 15:37
von Hyperion
mzh hat geschrieben:hm, wäre generatePage besser?
Von der Bedeutung schon - wobei die meisten Routen bei der Webprogrammierung ja Seiten "erstellen".

Formal sollten Funktionen und Methoden laut PEP8 "klein_und_mit_unterstrichen" geschrieben werden.