[mod_python] Tutorials, FieldStorage and sys.py. A depressing saga.

Terry MacDonald terry at i3technologies.co.uk
Thu May 22 19:36:24 EST 2003


Hi again,

Thankyou very much for your replies, You seem a nice bunch in here. 
I look forward to conversing with you over time (hopefully not all bug related!)

Anyways your advice solved one issue but unfortunately moved me on to the next.  
I am reaching the end of my patience as I have tried various work arounds to my 
ills and I just go up more garden paths to more problems (this should not be that 
difficult I know!).

Forgive me but I have decided to post the code to see if you can tell what is wrong 
cos I just can't get it to work as it is supposed to. The code is primarily example 
code but has been rejigged a little while trying to get it to work.

Problems occuring now is that the subn function is giving a mulitple repeat error.
When I comment out the offending code I just get Object not found in the browser. 
Also I have to put full pathnames in for the html files otherwise they cannot be 
found (I know this can't be right - but i'm trying anything to get this to work)

Ultimately the example should print a form, fetch the contents and display them 
back to you in another page (I think!) not exactly rocket science.

Below is the .py file and the two basic html files. Enjoy !

Cheers

Terry

================================================================================
#!/usr/bin/python
                                                                                                              
from mod_python import apache
from mod_python import util
import re
                                                                                                              
# specify the filename of the template file
TemplateFile = "/var/www/html/python/template.html"
                                                                                                              
# Display  takes one parameter - a string to Display
def Display(Content):
    TemplateHandle = open(TemplateFile, "r")  # open in read only mode
    # read the entire file as a string
    TemplateInput = TemplateHandle.read()
    TemplateHandle.close()                    # close the file
                                                                                                              
    # this defines an exception string in case our
    # template file is messed up
    BadTemplateException = "There was a problem with the HTML template."
                                                                                                              
    SubResult = re.subn( "<!-- *** INSERT CONTENT HERE *** -->", Content, TemplateInput )
    if SubResult[1] == 0:
        raise BadTemplateException
                                                                                                              
    print "Content-Type: text/html\n\n"
    print SubResult[0]
                                                                                                              
                                                                                                              
def ProcessForm(req):
                                                                                                              
    form = util.FieldStorage(req)
                                                                                                              
    # extract the information from the form in easily digestible format
    try:
        name = form["name"].value
    except:
        # name is required, so output an error if
        # not given and exit script
        Display("You need to at least supply a name. Please go back.")
        raise SystemExit
    try:
        email = form["email"].value
    except:
        email = None
    try:
        color = form["color"].value
    except:
        color = None
    try:
        comment = form["comment"].value
    except:
        comment = None
                                                                                                              
    Output = ""  # our output buffer, empty at first
                                                                                                              
    Output = Output + "Hello, "
                                                                                                              
    if email != None:
        Output = Output + "<A HREF=mailto:" + email + ">" + name + "</A>.<P>"
    else:
        Output = Output + name + ".<P>"
                                                                                                              
    if color == "swallow":
        Output = Output + "You must be a Monty Python fan.<P>"
    elif color != None:
        Output = Output + "Your favorite color was " + color + "<P>"
    else:
        Output = Output + "You cheated!  You didn't specify a color!<P>"
                                                                                                              
    if comment != None:
        Output = Output + "In addition, you said:<BR>" + comment + "<P>"
                                                                                                              
    Display(Output)
                                                                                                              
###
### Begin actual script
###
                                                                                                              
#### "key" is a hidden form element with an
### action command such as "process"
#try:
#    key = form["key"].value
#    key = form["key"].value
##except:
#    key = None
                                                                                                              
#if key == "process":
#    ProcessForm(form)
#else:
#    DisplayForm()
                                                                                                              
# Open and display the form
FormFile = "/var/www/html/python/form2.html"
FormHandle = open(FormFile, "r")
FormInput = FormHandle.read()
FormHandle.close()
Display(FormInput)
                                                                         
=======================================================================================

Form2.html.........

<FORM METHOD="POST" ACTION="sample.py/processform">
      <INPUT TYPE=HIDDEN NAME="key" VALUE="process">
      Your name:<BR>
      <INPUT TYPE=TEXT NAME="name" size=60>
      <BR>
      Email: (optional)<BR>
      <INPUT TYPE=TEXT NAME="email" size=60>
      <BR>
      Favorite Color:<BR>
      <INPUT TYPE=RADIO NAME="color" VALUE="blue" CHECKED>Blue
      <INPUT TYPE=RADIO NAME="color" VALUE="yellow">No, Yellow...
      <INPUT TYPE=RADIO NAME="color" VALUE="swallow">What do you mean, an African or European swallow?
      <P>
      Comments:<BR>
      <TEXTAREA NAME="comment" ROWS=8 COLS=60>
      </TEXTAREA>
      <P>
        <INPUT TYPE="SUBMIT" VALUE="Okay">
</FORM>
=======================================================================================
Template.html........

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
  <head>
    <META NAME="keywords" CONTENT="blah blah -- your ad here">
    <title>Python is Fun!</title>
  </head>
  <body>
                <!-- *** INSERT CONTENT HERE *** -->
  </body>
</html>
                                                                                                              




More information about the Mod_python mailing list