【问题标题】:Refresh web page using a CGI Python script使用 CGI Python 脚本刷新网页
【发布时间】:2016-09-20 20:43:49
【问题描述】:

我有一个非常简单的网页,我正在使用它来在 Raspberry Pi 上旋转步进电机。我的 html 文件是这样的:

<html>
<head>
<script Language="Javascript">

function ccw()
{
  document.location="cgi-bin/rotate_45_ccw.py";
}

function cw()
{
  document.location="cgi-bin/rotate_45_cw.py";
}

</script>
</head>

<body>
  <div style="text-align:center">
    <h1>Raspberry Pi GPIO</h1>
<br>
  <button type="button", id="ccw", onclick="ccw()", value="value CCW">Rotate CCW</button>
  <button type="button", id="cw", onclick="cw()", value="value CW">Rotate CW</button>
<br>
  </div>

</body>
</html>

我想要做的是在执行任一脚本之后刷新页面(以便用户可以再次单击任一按钮)。我猜的愚蠢方式是让 Python 脚本输出上面的 html 代码。有没有更聪明/更简单的方法?

谢谢!

【问题讨论】:

    标签: python raspberry-pi cgi refresh reload


    【解决方案1】:

    经过大量搜索,我终于找到了它!因此,为了重定向到主页,我必须在我的 python3 脚本末尾添加以下 print 语句:

    print ("Content-type: text/html\n\n")
    print ("<html><body>\n")
    print ("<meta http-equiv=\"refresh\" content=\"0; url = http://192.168.1.109\" />")
    print ("</body></html>")
    

    【讨论】:

    • 好 - 我认为它可以在 http 级别本身完成而不涉及 html 元标记 - 但肯定这适用于浏览器(但如果你使用 cURL 等其他工具来拉页)
    • 是的,我知道这与发送 HTTP 状态代码不同,尽管我并不真正了解它是如何工作的 :p ... 但问题是,它是 非常很难找到有关如何使用状态代码执行此操作的文档。我猜它是如此简单,以至于没有人愿意为像我这样的菜鸟解释它;)
    【解决方案2】:

    不,不要简单地返回页面 - 按例如f5-reload 将再次执行该操作。从 python 脚本返回带有控制页面 URL 的 303 See Other。因此,您始终拥有相同的“登录页面”,而不必对同一事物进行两次编码。理想情况下,旋转操作应该是 http POST(它们并非没有副作用),但这是一个不同的主题。

    【讨论】:

    • 谢谢斯特凡!究竟如何返回303 See Other?我的 CGI 脚本当前返回 print "Content-type: text/html\n\n"
    • 嗯,我自己不太擅长 python cgi 脚本。通常这会在内容类型的东西之上,比如"HTTP/1.1 303 See Other\nLocation: &lt;url of page&gt;\n"。检查例如stackoverflow.com/questions/17111809/…stackoverflow.com/questions/6122957/…
    • 感谢您提供更多信息。当我只打印这两行("HTTP/1.1...""Location:....")时,我得到一个错误(“Bad header”)。那么,这两行应该是我脚本的唯一输出吗?应该还有别的吗?
    • 好吧,然后是更多响应标题或\r\n\r\n。(\r\n DOS 样式的换行符在标题行之间的任何地方都可以)对不起,我无法在技术上为您提供帮助;您可以查看通常的文档来源或在此处搜索或尝试从中提出专门的问题。问题不能这么模糊,其他几个应该已经做到了 - 祝你好运
    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 2013-04-30
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多