PythonWebsites
From TkkrLab
This is a part of PythonMaterial.
## -*- coding: utf-8 -*- """ Example python module """ import traceback import sys from mod_python import apache, Session, Cookie, util from mako.lookup import TemplateLookup templates = '/var/www/site/templates' site = '/var/www/site/' lookup = TemplateLookup( directories=[templates], module_directory='/tmp/templates', input_encoding='utf-8', disable_unicode=True) pages = {} def handler(req): """ mod_python handler for registered pages """ page = req.filename.replace(site, '') if not page in pages: return apache.HTTP_NOT_FOUND try: req.content_type = 'text/html;charset=utf-8' req.status = apache.OK req.session = Session.Session(req) req.formdata = util.FieldStorage(req, 1) pages[page](req) return req.status except Exception, e: # pylint: disable-msg=W0703 sys.stderr.write( "Error: " + e.message + " " + str(e.args) + "\n") sys.stderr.write("Traceback:\n") traceback.print_tb(sys.exc_info()[2], file=sys.stderr) sys.stderr.flush() return apache.HTTP_INTERNAL_SERVER_ERROR def write(req, page, **args): """ generate a page from a template """ template = lookup.get_template(page) req.write(template.render(**args)) def field(s): """ Decode a given field into utf-8 """ return unicode(s).decode('string_escape') def show_info(req): """ page that shows an awefull lot of http data """ data = {} data[('1base', 'uri')] = req.uri data[('1base', 'filename')] = req.filename data[('1base', 'hostname')] = req.hostname data[('1base', 'time')] = req.request_time data[('1base', 'method')] = req.method data[('1base', 'remote')] = req.get_remote_host() data[('2headers', 'headers_in')] = req.headers_in data[('2headers', 'headers_out')] = req.headers_out if req.args != None: data[('3content', 'args')] = field(util.parse_qsl(req.args, 1)) data[('3content', 'fields')] = field(req.formdata.items()) data[('4session', 'cookies')] = Cookie.get_cookies(req) data[('4session', 'user')] = req.user data[('4session', 'auth_type')] = req.ap_auth_type data[('4session', 'session')] = req.session req.add_common_vars() data[('5apache', 'data')] = req.subprocess_env data[('5apache', 'docroot')] = req.document_root() data[('5apache', 'https')] = req.is_https() write(req, "show.html", args=data) pages['info.page'] = show_info
Install into apache:
- sudo mkdir -p /var/www/site/templates
- sudo cp module.py show.html /var/www/site/templates
- sudo cp index.html style.css /var/www/site
- sudo cp site.conf /etc/apache2/conf.d
- sudo /etc/init.d/apache2 reload
- firefox http://localhost/site
- firefox http://localhost/site/info.page/w00t?show=me%20%26%20you¬hing
- less /var/log/apache2/error_log
Removing again:
- sudo rm /var/www/site -rf
- sudo rm /etc/apache2/conf.d/site.conf
- sudo /etc/init.d/apache2 reload