[mod_python] PSP global variables

Jim Gallacher jpg at jgassociates.ca
Sun Nov 5 11:22:35 EST 2006

Clodoaldo Pinto Neto wrote:
> I'm building a PSP tutorial and can't find in the mod_python manual
> any references to the global variables req, form and session as in
> this article:
> http://www.onlamp.com/pub/a/python/2004/02/26/python_server_pages.html
> Are they unsupported features?

Completely supported, but poorly documented. There are some deficiencies 
  in the form and session support in 3.1 that are addressed in 3.2 and 
3.3. (We are hoping to do a 3.3 beta this week). I'm not sure how you'll 
deal with these changes in your tutorial. It may depend on your audience 
- beginner or more advanced?

Anyway, here are a few points to consider (bugs rather than features):

The session and form instances are created auto-magically when "session" 
or "form" are found in the psp code. eg.

name = session['name']
title = form['title']

The platform default session class will be used. There is no way to 
control this. If you need something else or want control over other 
aspects of your session such as timeout, *don't* reference "session" in 
the psp code. Use something else like sess, and create your own instance:

sess = Session.DbmSession(req, timeout=7200)

There are possible session locking issues if a session is created in 
other code outside the psp page, in another handler phase for example. 
It's easy to deadlock the session if you are not careful in manually 
unlocking the session.

You should only create a form once per request, as the request data is 
"consumed" when the FieldStorage instance is created. Attempting to 
create a second instance will result in a form object with no data. 
Again this is a problem if you want to access the form data outside of 
the psp page, such as in an earlier processing phase.

This version introduced a number of PythonOption's to allow 
configuration of the session, including the session type, directory (for 
dbm), session timeout and so on. This makes it much easer to control the 
session magic in psp pages. Check the docs for specifics, but note that 
we are introducing a new PythonOption namespace convention in version 3.3.

The req object is now checked for a session attribute, and if it is 
found it is used instead of creating a new one. This fixes one of the 
problems in 3.1 when the session object is created outside of the psp page.

The 3.2 PythonOption's which are deprecated in 3.3
	Deprecated in 3.3, use mod_python.session.session_type
	Deprecated in 3.3, use mod_python.session.application_path
	Deprecated in 3.3, use mod_python.session.cookie_name
	Deprecated in 3.3, use mod_python.session.session_directory
	Deprecated, use mod_python.dbm_session.database_filename
	Deprecated in 3.3,
	use mod_python.file_session.cleanup_time_limit
	Deprecated in 3.3,
	use mod_python.file_session.enable_fast_cleanup
	Deprecated in 3.3,
	use mod_python.file_session.cleanup_grace_period
	Deprecated in 3.3,
	use mod_python.file_session.cleanup_session_timeout
	Deprecated in 3.3,
	use mod_python.psp.cache_database_filename
The req object is checked for a "session" attribute, and if it is found 
it used. If it is created, the req object also gets a reference to it. 
Thus, the session object can be accessed by later processing phases as 
well via req.session.

The req object is checked for a "form" attribute, and if it is found it 
used. If it is created, the req object also gets a reference to it. 
Thus, the form object can be accessed by later processing phases as well 
via req.form.

As mention above, we are introducing a new namespace for PythonOption:


I'm hoping that I can nudge you in the direction of emphasizing 
mod_python 3.3 in your tutorial since there are a huge number of bug 
fixes and improvements in it - over 100 from 3.2. Although mod_python 
3.1 is still shipped by some linux distributions, it is over 2 years old 
and is getting quite crusty. With any luck we'll have 3.3 ready not long 
after you've completed your tutorial.

I can email you the html docs generated from svn trunk if that would be 

  > http://webpython.codepoint.net/mod_python_psp

A couple of comments:


.htaccess is misspelled in "must not be used inside the .htacces file".

You might want to mention that the security implications of using .psp_. 
Perhaps use the example of making a database connection with the user 
name and password in the psp file. You wouldn't want to use this on a 
publicly facing website. :)

It's nice to see someone creating these tutorials. :) Keep up the good 
work Clodoaldo.


More information about the Mod_python mailing list