Jorey Bump
list at joreybump.com
Sun Aug 29 03:10:26 EDT 2004
Tobiah wrote: > I'm trying to use the FieldStorage class from > the Publisher Handler... is that possible? It seems like it's not recommended to use it directly, according to the documentation. > I can read GET vars fine, but not POSTs. Form data is available in req.form when using publisher (no need to import anything to access them). For example, using this form: <form name="test" action="somefunction" method="POST"> <input type="hidden" name="foo" value="1"> <input type="hidden" name="bar" value="milkyway"> <input type="submit" name="submit" value="Try me!"> </form> the variables will be available in the function like this: def somefunction(req): x = req.form['foo'] y = req.form['bar'] result = """<html> <head> <title>foobar</title> </head> <body> <p>I would like %s %s. </p> </body> </html> """ % (x, y) return result Note that the values of multiple form elements of the same name will be returned as a list, so process accordingly. > Here is a boiled-down example of what I'm > trying to do: > > ----------------------------------------------- > > > from mod_python import util > from mod_python import apache You shouldn't need to import these with Publisher just to access form data. > def index(req): > > req.content_type = "text/html" > req.send_http_header() Not necessary, at least not on my setup. > doc = """ > <HTML> > <HEAD> > <TITLE>post example</TITLE> > </HEAD> > <BODY> > <FORM ACTION=index.py METHOD=POST NAME=foo> > <INPUT TYPE=text NAME=poster> > <INPUT TYPE=submit NAME=submitter VALUE='GO!'> > <BR> > """ That's fine, although I'm not a fan of using index.py for any reason, especially if you're just learning mod_python. You might waste time dealing with namespace clashes, which wouldn't occur if you gave the file a unique name. > f = util.FieldStorage(req, 1) > for e in f.list: > doc += "Element: %s, Value %s<BR>" % (e.name, e.value) I'm pretty sure you don't need or want to create an instance of FieldStorage in Publisher. You can do something like this instead: for key in req.form.keys(): doc += "Element: %s, Value = %s<BR>" % (key, req.form[key]) > doc += """ > </FORM> > </BODY> > </HTML> > """ > > return doc Try this example, saved as foobar.py (http://localhost/foobar.py/start): def start(req): result = """ <head> <title>foobar</title> </head> <body> <form name="test" action="somefunction" method="POST"> <input type="hidden" name="foo" value="1"> <input type="hidden" name="bar" value="milkyway"> <input type="submit" name="submit" value="Try me!"> </form> </body> </html> """ return result def somefunction(req): x = req.form['foo'] y = req.form['bar'] data = "<p>" for key in req.form.keys(): data += """Element: %s, Value = %s<br> """ % (key, req.form[key]) data += "</p>" result = """<html> <head> <title>foobar</title> </head> <body> <p>I would like %s %s. </p> %s </body> </html> """ % (x, y, data) return result
|