[mod_python] Newbie: mod_python.publisher application structure

fabiovenni at tin.it fabiovenni at tin.it
Wed Jul 13 06:45:27 EDT 2005


I'm a totally newbie in python and mod_python. Just a couple of weeks of
part-time toying.

I've managed to write a minimal blog using the mod_python.publisher handler.
This is the code, gross probably but does the job:

class Blog:

  def index(self, req):
    return """
  <html>
      <form action="post" method="POST">
  <pre>
  Title: <input style="vertical-align: top;" type="text" name="title">
   Body: <textarea style="vertical-align: top;" name="body" rows=4 cols=20></textarea>
         <input type="submit">
  </pre>
      </form>
  </html>
  """

  def post(self, req, title, body):
    return """
  <html>
  <pre>
  Title: %s
   Body: %s

  <a href="save?title=%s&body=%s" title="save post">Save!</a>
  </pre>
  </html>
  """ % (title, body, title, body)

  def save(self, req, title, body):
    import sys
    import time
    now = time.time()
    filename = req.document_root()+"/posts/"+str(now)[:-3]
    post = """<strong>%s</strong>\n%s""" % (title, body)
    try:
      fi = open(filename, 'w')
      fi.write(post)
      fi.close()
    except IOError:
      return '<pre>It hasn\'t been possible to save your post</pre>'

    return """
  <html>
    <pre>
  <strong>%s saved!</strong>
  <a href=\"list\" title=\"List\">List</a>
    </pre>
  </html>
    """ % (filename)

  def list(self, req):
    import os 
    from datetime import datetime
    dirname = str(req.document_root())+"/posts"
    output = "<html>\n<pre>\n"
    for post in os.listdir(dirname)[::-1]:
      output += "<em>"+str(datetime.fromtimestamp(float(post)))+"</em>\n"
      fi = open(dirname+"/"+post, 'r')
      output += fi.read()
      fi.close()
      output += "<hr />\n"
    output += "\n\n<a href=\"/\" title=\"New Post\">New Post</a>\n</pre>\n</html>"
    return output

Now, I was considering to build up a more complicated example and make it
my blog actual engine. I've choosen to use publisher because I like the mapping
URL --> callable object, but now I have some doubts that TFM doesn't solve,
or probably it will in a couple of month time. What is a callable object
in python?

As a web designer, navigation is very important to me so I plan websites
starting from the URL, my problem is that I can't think a class structure
that does the job:

myblogdomain.net/ 
myblogdomain.net/index     Resolved as the index page

myblogdomain.net/archives/2005/jun/    Resolved as blog.archives('2005','Jun')
myblogdomain.net/archives/2005           Resolved as blog.archives('2005')

myblogdomain.net/post/timestamp         Resolved as blog.post('timestamp')

I've been playing around with this:
http://www.modpython.org/pipermail/mod_python/2005-March/017560.html
but I'm confused on how to actually implement it. Do I have to put the Blog
class inside a index.py file? and configure Apache like this:

    <Directory /home/share/mod_python/first/>
        SetHandler mod_python
        PythonHandler mod_python.publisher
        PythonDebug On
    </Directory>

What I'm searching for is an application structure suggestion more than a
coding hint. I would like to have a single controller that handles requests
and traslate them to Blog's method calls, probably proxied by a class that
hanldes to fetch request parameters?

I'm confused please help me

Fabio





More information about the Mod_python mailing list