通过构建web界面,在web界面上对于数据库进行增删改查的操作。使用python中的web模块完成。 这部分内容目前在网上没有搜到太多类似的,所以有很多地方都是一点点自己试出来的。 另外这里的python程序需要用户联系自身的HTML文件,在本次实验中,我是通过把一部分python代码放到了HTML中,减少了代码的工作量,后来又考虑到URL的原因,所以把所有的程序放到了一个文件中。
import web
import model
# webpy模块具备URL匹配功能
urls = (
'/','index',
'/index1', 'index1',
'/index2', 'index2',
'/index3', 'index3',
'/index4', 'index4',
'/index5', 'index5',
'/add','add',
'/delete','delete',
'/change','change',
'/select','select',
'/turn_add','turn_add',
'/turn_change','turn_change',
'/turn_delete','turn_delete',
'/turn_select','turn_select',
'/returnback','returnback'
)
# 确定程序目录,链接数据库
app = web.application(urls, globals())
render = web.template.render('templates/')
db = web.database(dbn='', host='', port=,
db='', user='', pw='')
# 表示层,web的首页。
class index:
def GET(self):
return render.index()
# 业务逻辑层,针对具体问题的操作
class turn_add:
def POST(self):
print("touch it\n")
raise web.seeother('/index1')
class turn_delete:
def POST(self):
print("touch it\n")
raise web.seeother('/index2')
class turn_change:
def POST(self):
print("touch it\n")
raise web.seeother('/index3')
class turn_select:
def POST(self):
print("touch it\n")
raise web.seeother('/index4')
class returnback:
def POST(self):
raise web.seeother('/')
# 还是表示层
class index:
def GET(self):
return render.index()
class index1:
def GET(self):
return render.index1()
class index2:
def GET(self):
return render.index2()
class index3:
def GET(self):
return render.index3()
class index4:
def GET(self):
return render.index4()
class index5:
def GET(self):
return render.index5(email)
# 数据访问层,直接操作数据库的语句
class add:
def POST(self):
i = web.input()
print(i.用户ID)
if i.用户ID!='用户ID' and i.用户名!='用户名' and i.个人简介!='个人简介' and i.所在行业!='所在行业':
n = db.insert('user', 用户ID=i.用户ID, 用户名=i.用户名,个人简介=i.个人简介,所在行业=i.所在行业)
raise web.seeother('/') #POST方法接收到一个post并完成处理后,它将给浏览器发送一个303消息和新网址
else:
raise web.seeother('/')
class delete:
def POST(self):
i = web.input()
print(i)
a=i.用户ID
print(a)
db.delete('user',where='用户ID = $a',vars=locals())
raise web.seeother('/')
class change:
def POST(self):
i=web.input()
print(i)
a=i.用户ID
b=i.用户名
if b!='用户名':
db.update('user',where='用户ID=$a',vars=locals(), 用户名=i.用户名)
c=i.个人简介
if c!='个人简介':
db.update('user',where='用户ID=$a',vars=locals(), 个人简介=i.个人简介)
d=i.所在行业
if d!='所在行业':
db.update('user',where='用户ID=$a',vars=locals(), 所在行业=i.所在行业)
# db.update('user',where='用户ID=$a',vars=locals(), 用户名=i.用户名,个人简介=i.个人简介,所在行业=i.所在行业)
raise web.seeother('/')
class select:
def POST(self):
i=web.input()
print(i)
a=i.用户ID
if i.用户ID=='用户ID':
information = db.select('user')
print(information)
return render.index5(information)
else:
# 之所以要添加vars=locals()这句代码的原因,真的真的很重要!!!!!(坑了我好久)
# 更新并以字典形式返回当前局部符号表. 自由变量由函数块的locals() 返回, 而不会由 class 块来返回. 需要注意的是, locals() 字典不应该被修改; 在解释器中对修改行为可能对 local 值或者自由变量无效.
# 返回 __dict__ 属性, 比如模块, 类, 实例, 或者其他 带有 __dict__ 属性的 object. 比如 模块和实例拥有可更新的 __dict__ 属性;
# 然而其他 objects 可能会对 __dict__ 属性的写操作限制(例如 类使用 dictproxy 阻止直接对字典更新).vars() 如果不传参数
# 那么作用与 locals() 一样. 需要注意的是, locals 字典只在读操作时使用, 因为对 locals 的更新会被忽略.
information = db.select('user',where='用户ID=$a',vars=locals())
return render.index5(information)
if __name__ == "__main__":
app.run()
|