代码结构
dmeo/ demo.sql demo.py demo.html edit.html
/* * CREATE DATABASE mydb TEMPLATE template0; 创建数据库 * psql mydb; 进入新创建数据库 * \i demo.sql 导入sql */ CREATE TABLE demo( email varchar(128) PRIMARY KEY, name varchar(50) NOT NULL, phone varchar(11) )
# -*- coding: utf-8 -*- import web from web import form import re urls = ("/", "index", "/update/(.*)/", "update", "/delete/(.*)/", "delete",) app = web.application(urls, globals()) render = web.template.render('', cache=False) # 配置模板路径 db = web.database(host="127.0.0.1",dbn='postgres', db='mydb', user='postgres', pw='000000') # 数据库链接 不写host会出错 # EMAIL 验证 def is_email(email): p = re.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*") return p.match(email) != None # 表单 demo_form = form.Form( form.Textbox("email", description="email"), form.Textbox("name", description="name"), form.Textbox("phone", description="phone"), validators = [ form.Validator(u"email必填", lambda i: i.email), form.Validator(u"email格式错误", lambda i: is_email(i.email)), form.Validator(u"name必填", lambda i: i.name),] ) class index: def GET(self): """查询""" demoitems = db.select('demo') df = demo_form() return render.demo(demoitems, df) def POST(self): """增加""" demoitems = db.select('demo') df = demo_form() if not df.validates(): return render.demo(demoitems, df) else: email = df.email.value name = df.name.value phone = df.phone.value db.insert('demo', email = email, name = name, phone = phone) web.seeother('/') class update: """更新""" def GET(self, key): demo = db.select('demo',vars={"key":key}, where="email=$key") if len(demo): data = demo[0] df = demo_form() df.email.value = data.email df.name.value = data.name df.phone.value = data.phone return render.edit(df) else: web.seeother('/') def POST(self, key): df = demo_form() if not df.validates(): return render.edit(df) else: email = df.email.value name = df.name.value phone = df.phone.value db.update('demo', vars={"key":key}, where="email=$key", email = email, name = name, phone = phone) web.seeother('/') class delete: """删除""" def GET(self, key): db.delete('demo',vars={"key":key}, where="email=$key") web.seeother('/') if __name__ == "__main__": app.run()
$def with(demoitems,form) <hr /> <h2>INSERT</h2> <form action="/" method="post"> $:form.render() <input type="submit" value="submit"> </form> <hr /> <h2>LIST</h2> <table> <tr> <td>email</td> <td>name</td> <td>phone</td> </tr> $for demo in demoitems: <tr> <td>$demo.email</td> <td>$demo.name</td> <td>$demo.phone</td> <td> <a href="/update/$demo.email/">EDIT</a> </td> <td> <a href="/delete/$demo.email/">DELETE</a> </td> </tr> </table>
$def with(form) <hr /> <h2>UPDATE</h2> <form action="/update/$form.email.value/" method="post"> $:form.render() <input type="submit" value="submit"> </form>