Web py 官方教程实现

这是跟着 官方教程 自己实现了一遍的代码。排除了一些错误。

运行环境:

  • 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>

注意:修改文件后保存是能实时刷新的,但有时候不知道是浏览器缓存还是什么情况,报错后需要使用新浏览器打开或重启服务才能正确显示页面。有时候改之前是好的,改完了发现报错了,再改回去还是报错,重启服务也报错,在新浏览器打开又可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值