【问题标题】:HTML button on client to run python script on server then send results to webpage on client客户端上的 HTML 按钮,用于在服务器上运行 python 脚本,然后将结果发送到客户端上的网页
【发布时间】:2014-08-16 21:18:23
【问题描述】:

我之前看过一些类似的问题,但我找不到类似的问题。我有一个网页(在服务器上),我希望用户单击一个将执行 python 脚本的按钮。我希望这个 python 脚本在服务器上运行,然后将结果发送回网页并显示它。

当用户单击按钮时,将发送到服务器的数据将是一个 XML 文件。

我只是不知道从哪里开始。我可以用什么来实现这一点?

感谢您的宝贵时间。

编辑:我实际上已经完成并设置了网页,它会生成 XML。当用户单击网页上的按钮时,我只需要运行 python 脚本。不确定这是否有帮助,但我正在发布它。谢谢

我想对此进行高级解释,谢谢,因为我不知道已经向我建议了什么。

【问题讨论】:

  • 您可能想研究一下使用Flask。它可能比您需要的更多,但它可能会解决您的问题。
  • 谢谢,亚历克斯。我会研究一下 Flask。
  • 所以我研究了flask,它是一个web应用程序的框架。我不确定我是否想走那条路。我已经准备好网页,它会生成我想要发送到服务器的 XML 文件。所以我不确定如何将 Flask 融入其中?
  • +1 用于 Flask 或 Django。您基本上会从 Flask 或 Django 视图中调用您的脚本,该视图被路由到 API URL 端点,并将数据作为响应返回。然后,您可以在按下按钮时通过 AJAX 调用点击该 API 端点。

标签: javascript python html client-server client


【解决方案1】:

有很多用于 python 的网络库。您可以尝试使用 Bottle(无需安装即可工作,一个文件,只需将“bottle.py”文件放在您的工作文件夹中即可。一个简单的示例:

    from bottle import route, run, static_file, post, request
    @route('/js/<filename>')
    def js(filename):
        return static_file(filename, root='js')

    @route('/')
    def index():return static_file('tst.html', root='./')

    @post('/xml')
    def xml():
        for x in request.forms:
            print(x)
        return {'return': 'accepted'}

    run(host='0.0.0.0', port=8000)

还有html:

<!DOCTYPE html>
<html lang="ro">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>TTL</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script type="text/javascript" src="js/jquery.js"></script>
</head>
<body>
<button onclick="test()">Test</button>
<script type="text/javascript">
    function test() {
        $.ajax({
            url: 'xml',
            type: 'POST',
            data: '<my><xml>string</xml></my>',
            dataType: 'json',
            success: function (ret) {
                alert(ret['return']);
            }
        });
    }
</script>
</body>
</html>

对不起JQuery,懒得写普通的js xhr。 Bottle 有据可查,但也有cherrypy、pyramid、django、tornado。

【讨论】:

  • 谢谢。我只是尝试理解这一点,但我认为它需要我在本地主机上运行它?我不确定,你能给我一些关于如何去做的解释吗?另外,您正在使用ajax。我需要这个来完成这样的事情吗?
  • “0.0.0.0” adr 在您当前的 IP 上运行(如果防火墙这么说,可能是从外部访问)。 Ajax 被听到“内联”传递,我懒得写一个 3 页的 html,但是如果你用 action='xml' method='post' 制作了一个表单,提交去相同的路线。此外,如果您使用表单,则每个输入都可以作为 request.get('input name') 访问。我使用瓶子,因为默认情况下将 dict 转换为 json,但是还有很多其他的 Web 助手可能更适合您的需要。我认为 Django 是最常用/记录最多的工具之一,但您可能需要了解一下它。
  • 感谢您的回复。我对此很陌生,所以我实际上正在寻找一个更高级的答案。这对我来说是相当低级的,所以我不太了解它。谢谢
猜你喜欢
  • 2012-06-29
  • 1970-01-01
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
相关资源
最近更新 更多