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] ) 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