这是跟着 官方教程 自己实现了一遍的代码。排除了一些错误。
运行环境:
- web.py 的版本为 0.61
- python 的版本为 3.12.4
- 通过
pip install web.py==0.61
进行的安装。
python 源代码
命名为 code.py,不要命名为 web.py,不然第一句会把自己引入,而非引入正确的 web 包,导致报错 AttributeError: 'module' object has no attribute 'application'
。
# 运行服务 python code.py 12020
import web
# 添加模板查询目录
render = web.template.render('templates/')
# 创建数据库对象
db = web.database(dbn='mysql', user='root', pw='123456', db='temp_test')
# 定义URL路由规则
urls = (
'/', 'index', # 这里的'index'是请求处理器类的名称
'/tmp', 'template', # 从指定路径中指定路由到模板处理器,通过url传参
'/tmp-rest/(.*)', 'templateRest', # 匹配 /tmp-rest/ 路径中指定路由到模板处理器,RESTFUL 风格传参
'/db-get', 'dbGet', # 从数据库获取数据
'/db-post', 'dbPost', # 向数据库添加数据页面
'/db-add', 'dbAdd' # 向数据库添加数据请求 由 dbPost.html 页面发出请求 db-add
)
# 创建请求处理器类-纯文本 http://localhost:12020/
class index(object):
def GET(self):
return 'Hello World!'
# 创建请求处理器类-模板 http://localhost:12020/tmp?name=123
class template(object):
def GET(self):
i = web.input(name=None) # 从输入中获取变量
return render.template(i.name) # 这里的template是模板文件名称
# 创建请求处理器类-模板RESTFULL风格 http://localhost:12020/tmp-rest/123
class templateRest:
def GET(self,name):
return render.template(name) # 这里的template是模板文件名称
# 创建请求处理器-数据库获取 http://localhost:12020/db-get 注意官方模板的 id配置有问题,变量不能放在引号里
class dbGet:
def GET(self):
todos = db.select('todo')
return render.dbGet(todos)
# 创建请求处理器-向数据库新增的页面 http://localhost:12020/db-post
class dbPost:
def GET(self):
return render.dbPost()
# 创建请求处理器-向数据库新增的操作 由 dbPost 页面发出请求
class dbAdd:
def POST(self):
i = web.input()
n = db.insert('todo', title=i.title) # 插入数据,返回行号
raise web.seeother('/') # seeother 表示页面重定向
# 创建web.application对象
if __name__ == "__main__":
app = web.application(urls, globals())
app.run() # 启动服务器
页面模板文件
在 code.py 文件同级目录下新建 templates 文件夹,其中添加如下 html 模板页面。
template.html
$def with (name)
$if name:
I just wanted to say <em>hello</em> to $name.
$else:
<em>Hello</em>, world!
dbGet.html
$def with (todos)
<ul>
$for todo in todos:
<li id=$todo.id>$todo.title</li>
</ul>
dbPost.html
<form method="post" action="db-add">
<p><input type="text" name="title" /> <input type="submit" value="Add" /></p>
</form>
注意:修改文件后保存是能实时刷新的,但有时候不知道是浏览器缓存还是什么情况,报错后需要使用新浏览器打开或重启服务才能正确显示页面。有时候改之前是好的,改完了发现报错了,再改回去还是报错,重启服务也报错,在新浏览器打开又可以了。