瓶子和HTML如何来回沟通?

时间:2015-11-19 09:45:52

标签: python twitter-bootstrap bottle

所以我试图将bottle.py和twitter bootstrap一起用来制作一个小网站。我需要能够使用Python在HTML中的各个点插入合理数量的数据,但我不确定我是否理解HTML和python是如何通信的。

Here是推特和瓶子一起工作的一个例子。

他提到在html中链接几个.js文件,我可以看到他在哪里做,但我不确定这会影响python如何与html交互。是否存在python使用request.GET.get().strip():捕获的Javascript回调?

最后一行也是:

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

我不确定templates/gpio.tpl如何与他在下面提到的html相关联。我理解颜色#变量在html中被引用(我假设这发生在{{}}语法中)但我不确定如何调用html。

根据我的理解(到目前为止还不是很多),这是怎么回事:

  • 用户将“server:port / gpio”输入到webbrowser
  • python decorator被瓶子调用,函数运行返回底部的模板。
  • 这是我感到困惑的地方。
    • A)python脚本如何知道调用html?
    • B)如何将gpio.tpl模板代码发送到html?
    • C)可以安全地假设发送给模板函数的python参数可以使用{{}}语法引用,还是有更多内容?
    • D)html如何回调python来更新他在底部显示的按钮?
    • D.1)顶部链接的JS是否与此有关?

最后:如果有人有另一个/更好的链接bootstrap和瓶子的例子,我会很高兴看到它。

这是一个非常有用的帖子。感谢您的耐心等待。 :d

2 个答案:

答案 0 :(得分:3)

您真的需要首先了解HTTP协议的工作原理......但是,让我们快速回答您的主要问题:

  

HTML和python如何通信

很简单:他们没有。会发生什么:

  1. 您的客户(通常是您的浏览器)向您的网站发送HTTP请求
  2. 前端Web服务器(Apache,Nginx等)将此请求发送到bottle.py应用程序
  3. bottle.py应用程序将请求分派给匹配url的路径部分的权限控制器功能,并根据定义的- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { APInfoTableViewCell *cell = (APInfoTableViewCell*)[super tableView:tableView cellForRowAtIndexPath:indexPath]; [cell.infoLabel setText@"Hello World"]; return cell; } 请求方法
  4. 控制器功能执行它必须执行的操作并将HTTP响应返回到前端Web服务器
  5. 前端Web服务器将此响应发送给您的客户端
  6. 通常 - 但不一定 - HTTP响应包含由控制器使用模板生成的HTML内容。 IOW:bottle.py使用模板生成发送回客户端的 html。

    一旦发送了回复,就不再有"通信"直到客户端发送另一个请求。

答案 1 :(得分: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