Jason Morgan
jwm-mod_python at sentinelchicken.net
Sat May 18 14:45:22 EST 2002
Thanks everyone for the help. It has been very useful. Thanks again Jason On Fri, May 17, 2002 at 08:27:54PM -0700, Ian Clelland wrote: > On Tue, May 14, 2002 at 10:13:13PM -0700, Jason Morgan wrote: > > Hello: > > > > Ok, please excuse my ignorance, but I'm trying to move three sites > > over to mod_python from php and I'm having some trouble figuring what > > is the 'proper' way to proceed. I have mod_python installed and > > working, however, I'm not familiar with the handler concept (yes, I > > RTFM) and am trying to decide what to do with it. Should I have > > handler dealing with everything in my dirs, while passing off content > > generation to methods within personal modules? What is the role of > > mod_python.publisher. I would appreciate any help I can get - URLs > > are welcome. I've done the google searches, though, and haven't come > > across anytrhing about how people actually structure their sites. I > > dont' just want to hack something together - as I plan to leave most > > site maintenance to a new employee > > :-). > > Well, I'm not sure how closely my experiences mirror those of other > mod_python developers, but I can try to give you some insight. (I spent > about two years writing almost exclusively in PHP, and am now adjusting > to mod_python) > > The handler concept is by far the biggest difference between the two > environments. A PHP script typically resides 'at' a specific URL, and > only services requests for that URL. A mod_python handler, in contrast, > becomes part of the web server, and handles requests whenever Apache > gives them to it. > > To be a little clearer, the way I will usually install a handler is to > include it within an Apache <Location> directive. For example, I am > writing a user-management module, and I want it to be mounted at > http://mysite.com/users, so I set up Apache like this: > > <Location /users> > SetHandler python-program > PythonPath "sys.path+['/usr/local/lib/site_apps']" > PythonHandler userinfo > </Location> > > This means that now my python module (at > /usr/local/lib/site_apps/userinfo.py) is responsible for *every* > request to a URL which begins with "/users". > > The first thing that userinfo.py does is analyse the URL of the request > to see exactly what was requested. If it is just "/users/", it displays > a list of users. If it is "/users/showuser/ian", then it looks up the > user record for 'ian' and displays that record. If it is > "/users/no-such-page" then it returns apache.DECLINED, and Apache > handles the 404 error. > > I can also distinguish between GET and POST requests by examining the > req.method variable. If the request is a GET to > "/users/deleteuser/ian", then userinfo.py will display a confirmation > page. If it is a POST to that same URL, it will read the POST data, > look for a confirmation, and delete the user. > > Most of my handlers are designed in this fashion, as one main python > module installed under a base URL, which defines a "URL-space". The > main module uses import statements to access all of the libraries it > needs (database access, user record class, string, cgi, etc.) to do its > work. > > > If you want to look for other resources on application design with > mod_python, try searching for information on mod_perl. It's the closest > thing I have found to mod_python, as they both act as scripting- > language interfaces to the Apache C API. O'Reilly's book "Writing > Apache Modules with Perl and C" has been an invaluable resource for me. > Also, once you understand how the Apache API works, the mod_python > documentation becomes a much more useful tool. > > > If your goal is just to convert your applications from PHP to the > Python language, then you may want to look at the Publisher handler > which Grisha has supplied with mod_python. It allows you to use Python > scripts in a very similar fashion to PHP or CGI scripts, and a lot of > people on this list seem to be using it exclusively. In that case, the > publisher handler becomes the default handler for your entire site. It > deals with every request that comes in by looking for a Python module > with the appropriate name in the right directory, and passing it > parameters based on the request. (This is actually completely backwards > to the way PHP works, but the effect is the same -- you believe that > you are calling the Python script directly from the URL.) > > > I hope this answers at least some of your questions; feel free to ask > more if I've just made things more confusing :) > > > Ian > <ian at veryfresh.com> > > _______________________________________________ > Mod_python mailing list > Mod_python at modpython.org > http://www.modpython.org/mailman/listinfo/mod_python
|