Eric Brunson wrote: > ALAN GAULD wrote: > >> Forwarding to the list.... >> >> NB Use Reply-All when replying to the tutor list. >> >> Alan G. >> >> ----- Forwarded Message ---- >> From: Ryan <[EMAIL PROTECTED]> >> To: Alan Gauld <[EMAIL PROTECTED]> >> Sent: Tuesday, 11 September, 2007 5:32:33 AM >> Subject: Re: [Tutor] Apache, CGI-BIN, Python >> >> Alan Gauld wrote: >> >> >>> "Ryan" <[EMAIL PROTECTED]> wrote >>> >>> >>> >>> >>>> I am running a Linux box and cannot find my Apache cgi-bin to put >>>> some >>>> python scripts in. I know I probably have to create one but don't >>>> know >>>> where and how. >>>> >>>> >>>> >>> I think there are several places that you can create cgi-bin depending >>> on how you configure apache. But the place I usually see it is >>> directly >>> under the apache root directory - ie the one that is equivalent to / >>> in >>> the url. >>> >>> >>> >>> >>>> everything works fine except: >>>> >>>> form = cgi.FieldStorage() >>>> >>>> #This is where everything goes wrong >>>> #I get error messages for either the lastname line or firstname >>>> >>>> >>>> >>> Can you tell us >>> a) exactly what error messages and >>> b) How you are invoking the script - where are the values >>> supposed to be coming from? >>> >>> >>> >>> >>>> lastname = form['lastname'].value >>>> firstname =form['firstname'].value >>>> message = firstname + " " + lastname >>>> print reshtml % message >>>> >>>> >>>> >>> The HTML Doc: >>> >>> >>> >> <html> >> >> <form action = "test1.py"> >> <p> Enter your first name:</p> >> <input type="text" name="firstname" size="40"> >> <input type="text" name="lastname" size="40"> >> <input type = "submit"> >> <input type ="reset"> >> </form> >> </html> >> >> Error: >> >> Mod_python error: "PythonHandler mod_python.publisher" >> >> > > You don't use the cgi module when using the mod_python publisher > handler. Your function will be called with the form variables as named > parameters, like this: > > def handle_form_input( req, firstname, lastname ): > # do something here > > I would recommend giving defaults for the parameters so if the user > doesn't submit a value it, it doesn't throw an exception, like this: > > def handle_form_input( req, firstname=None, lastname=None ): > # whatever > > And, I've been known to simulate the cgi behavior like this: > > def handler_form_input( req, **form ): > # access your form variables as an array > print "You entered %s %s" % ( form[lastname], form[firstname] ) > >
It's late, that should read: def handler_form_input( req, **form ): # access your form variables as a dict return "You entered %s %s" % ( form['lastname'], form['firstname'] ) > But, remember that this "form" is a simple dict, not a cgi.FieldStorage > and I don't know what it does with multiple values with the same key. > FieldStorage puts them in an array, you'd have to experiment with this > in the publisher handler. > > See how much better answers you get when you ask good questions and > include error messages. :-) > > Hope that helps, > e. > > > >> Traceback (most recent call last): >> >> File "/usr/lib/python2.5/site-packages/mod_python/apache.py", line 299, in >> HandlerDispatch >> result = object(req) >> >> File "/usr/lib/python2.5/site-packages/mod_python/publisher.py", line 204, >> in handler >> module = page_cache[req] >> >> File "/usr/lib/python2.5/site-packages/mod_python/cache.py", line 82, in >> __getitem__ >> return self._checkitem(name)[2] >> >> File "/usr/lib/python2.5/site-packages/mod_python/cache.py", line 124, in >> _checkitem >> value = self.build(key, name, opened, entry) >> >> File "/usr/lib/python2.5/site-packages/mod_python/publisher.py", line 77, >> in build >> return ModuleCache.build(self, key, req, opened, entry) >> >> File "/usr/lib/python2.5/site-packages/mod_python/cache.py", line 371, in >> build >> exec opened in module.__dict__ >> >> File "/var/www/python/test1.py", line 16, in >> lastname = form['lastname'].value >> >> File "cgi.py", line 567, in __getitem__ >> raise KeyError, key >> >> KeyError: 'lastname' >> >> But I can get this script to work properly: >> def index(req): >> return "Test succesful"; >> >> >> >> >> >>> HTH, >>> >>> >>> >>> >>> >> >> >> _______________________________________________ >> Tutor maillist - Tutor@python.org >> http://mail.python.org/mailman/listinfo/tutor >> >> > > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor