代碼結構
dmeo/
demo.sql
demo.py
demo.html
edit.html
demo.sql
/*
* 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)
)
demo.py 運作python demo.py
# -*- 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()
demo.html
$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/" target="_blank" rel="external nofollow" >EDIT</a>
</td>
<td>
<a href="/delete/$demo.email/" target="_blank" rel="external nofollow" >DELETE</a>
</td>
</tr>
</table>
edit.html
$def with(form)
<hr />
<h2>UPDATE</h2>
<form action="/update/$form.email.value/" method="post">
$:form.render()
<input type="submit" value="submit">
</form>