I like it because it's simple and I found it intuitive and easy to learn. You can set it up quickly on Fedora with:
yum install python-webpy yum install MySQL-pythonIt was straight forward to follow the tutorial, except it's not obvious in the tutorial how to specify a different DB server besides the default localhost. The keyword argument is 'host' just like in MySQLdb.connect(), which is provided by the Python package MySQLdb; i.e. the MySQL-python yum package. Here's the example from the tutorial in which an external DB server is declared:
db = web.database(dbn='mysql',\
user='user',\
pw='password',\
db='todo',\
host='mysql.example.com')
Also, the PostgreSQL example translates into MySQL like this:
CREATE TABLE todo ( id serial primary key, title text,
created timestamp default now(),
`done` boolean default '0' );
specifically boolean is an synonym for tinyint in MySQL so it uses not 'f' but '0' to represent false.
The output code from my tutorial is:
code.py:
#!/usr/bin/env python
# Filename: code.py
# Description: intro to web.py
# Supported Langauge(s): Python 2.7.x
# Time-stamp: <2011-06-04 18:15:06 someguy>
# -------------------------------------------------------
import web
# -------------------------------------------------------
render = web.template.render('templates/')
urls = (
'/', 'index',
'/add', 'add'
)
app = web.application(urls, globals())
db = web.database(dbn='mysql',\
user='todo',\
pw='redacted',\
db='todo',\
host='mysql.example.com')
# -------------------------------------------------------
class index:
def GET(self):
todos = db.select('todo')
return render.index(todos)
class add:
def POST(self):
i = web.input()
n = db.insert('todo', title=i.title)
raise web.seeother('/')
# -------------------------------------------------------
if __name__ == "__main__":
app.run()
templates/index.html
$def with (todos)
<ul>
$for todo in todos:
<li id="t$todo.id">$todo.title</li>
</ul>
<form method="post" action="add">
<p><input type="text" name="title" />
<input type="submit" value="Add" /></p>
</form>
No comments:
Post a Comment