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