Bottle和HTML如何双向通信?

0 投票
2 回答
819 浏览
提问于 2025-05-10 15:08

我正在尝试将 bottle.py 和 twitter bootstrap 一起使用,来制作一个小网站。我需要在 HTML 的不同位置插入一些数据,用 Python 来实现,但我不太明白 HTML 和 Python 是怎么沟通的。

这里有一个关于 twitter 和 bottle 一起工作的例子。

他提到在 HTML 中链接了一些 .js 文件,我能看到他是怎么做的,但我不太明白这对 Python 和 HTML 的互动有什么影响。是否有 JavaScript 的回调,Python 是通过 request.GET.get().strip(): 来捕捉的呢?

另外,最后一行是:

return template('templates/gpio.tpl', colour1=colour1, colour2=colour2, colour3=colour3)

我不太确定 templates/gpio.tpl 是怎么和他下面提到的 HTML 连接起来的。我知道颜色变量在 HTML 中被引用(我猜这用的是 {{}} 语法),但我不太明白 HTML 是怎么被调用的。

根据我的理解(目前还不是很多),大概是这样:

  • 用户在浏览器中输入 "server:port/gpio"
  • bottle 调用 Python 装饰器,运行函数并返回底部的模板。
  • 这时我就困惑了。
    • A) Python 脚本是怎么知道要调用 HTML 的?
    • B) gpio.tpl 模板代码是怎么发送到 HTML 的?
    • C) 可以安全地假设发送到模板函数的 Python 参数可以用 {{}} 语法引用吗,还是说还有其他的?
    • D) HTML 是怎么回调 Python 来更新他在底部展示的按钮的?
    • D.1) 最上面链接的 JS 和这个有关吗?

最后:如果有人有其他更好的例子来链接 bootstrap 和 bottle,我会很高兴看到。

这是一篇内容很丰富的帖子。谢谢你的耐心。:D

相关文章:

  • 暂无相关问题
暂无标签

2 个回答

0

如果我想做一个 HTML 按钮,点击后能改变页面上的某些内容,我该怎么把这个反馈发回 bottle.py,让页面更新呢?

这要看你想改变什么……

比如,点击按钮可以触发一个新的 HTTP 请求,这样你就需要在代码里定义一个新的功能。

我们以之前的例子为基础,假设你想添加一个 switchOff 按钮。

你需要在 gpio.tpl 文件中的某个地方添加以下按钮:

<input type="submit" class="btn" name="LedsOff" value="Turn off the leds!">

然后,修改 gpio() 函数,添加一个新的条件,代码如下:

elif request.GET.get('LedsOff','').strip():
    from quick2wire.gpio import Pin, exported
    with exported(Pin(12, Pin.Out)) as out1, exported(Pin(13, Pin.Out)) as out2:
        out1.value = 0
        out2.value = 0
3

首先,你需要了解一下HTTP协议是怎么工作的……不过我们先来快速回答你的主要问题:

HTML和Python是怎么交流的

简单来说:它们并没有直接交流。发生的事情是:

  1. 你的客户端(通常是浏览器)向你的网站发送一个HTTP请求。
  2. 前端的网络服务器(比如Apache、Nginx等)把这个请求转发给bottle.py应用。
  3. bottle.py应用根据请求的URL路径和请求的方法,把请求交给合适的控制器函数处理。
  4. 控制器函数完成它的工作后,会返回一个HTTP响应给前端网络服务器。
  5. 前端网络服务器再把这个响应发送给你的客户端。

通常情况下——但不一定——这个HTTP响应包含了由控制器使用模板生成的HTML内容。换句话说:bottle.py使用模板来生成发送回客户端的HTML。

一旦响应发送出去,直到客户端发送另一个请求之前,就没有更多的“交流”了。

撰写回答