【问题标题】:Passing form data to python将表单数据传递给python
【发布时间】:2013-01-26 21:50:09
【问题描述】:

我有一个 HTML 表单,其中包含我想发送到我的 SVN 的数据。由于 HTML/JS 无法做到这一点,我想使用 Python 作为表单和 SVN 之间的链接。我的问题是我不知道如何将数据从 HTML/JS 发送到 Python,两者都是客户端(不涉及服务器)。

我想象会发生的是,用户填写表单,然后按下“提交”按钮,该按钮将调用 Python 脚本并将表单数据作为参数传递。

我一直在搜索,发现人们正在运行 Python 服务器端并从他们的 javascript 发布到它,但由于我没有服务器,我认为这对我来说是不可能的。

如果它们都是客户端,是否可以将数据从 HTML/JS 发送到 Python?


编辑:我应该补充一点,我在 Python 和 JS 方面确实有很好的背景

【问题讨论】:

  • SVN 和 subversion 一样吗?
  • 你熟悉javascript和AJAX吗?
  • @JonathanVanasco 是的,我就是这个意思。
  • @Torxed 不,我不熟悉 AJAX
  • 看看我的解决方案,如果你知道如何开发东西,你很可能会成功地将和平放在一起:)

标签: javascript python html


【解决方案1】:

以下是一些将 Python 与 JavaScript 相结合的巧妙方法:

Return data from html/js to python

注意:由于您提到您没有服务器,因此您使用 javascript 调用的请求必须指向运行 python 代码的套接字的侦听端口。 简单的方法是使用 python 在端口 80 上侦听,然后进行常规调用,而无需考虑 JavaScript 中的 :80。

基本上,HTML 表单,使用 JavaScript onSubmit() 或调用上面帖子中的 AJAX 代码的 按钮,然后让 Python 读取 JSON 数据(构造 <form>数据根据链接顶部显示的JSON format


以下是关于如何通过 javascript 使用表单数据的简短介绍:

<HTML>
    <HEAD>
        <TITLE>Test Input</TITLE>
        <SCRIPT LANGUAGE="JavaScript">
        function testResults (form) {
            var TestVar = form.inputbox.value;
            alert ("You typed: " + TestVar);
        }
        </SCRIPT>
    </HEAD>
    <BODY>
        <FORM NAME="myform" ACTION="" METHOD="GET">Enter something in the box: <BR>
            <INPUT TYPE="text" NAME="inputbox" VALUE=""><P>
            <INPUT TYPE="button" NAME="button" Value="Click" onClick="testResults(this.form)">
        </FORM>
    </BODY>
</HTML>

使用此原则收集您的信息,
然后在顶部提到的链接中构建 AJAX 部分..
完成后,启动一个 python 脚本(也显示在链接中)来监听这些调用。

记住:要使用JSON,格式正确,例如'是不允许的,它必须是"


在我的链接中,这是将 GET 请求发送到“服务器”(python 脚本)的重要部分:

xmlhttp.open("GET","Form-data",true);

这是python部分:

from socket import *
import json
s = socket()
s.bind(('', 80)) # <-- Since the GET request will be sent to port 80 most likely
s.listen(4)
ns, na = s.accept()

while 1:
    try:
        data = ns.recv(8192) # <-- Get the browser data
    except:
        ns.close()
        s.close()
        break

    ## ---------- NOTE ------------ ##
    ## "data" by default contains a bunch of HTTP headers
    ## You need to get rid of those and parse the HTML data,
    ## the best way is to either just "print data" and see
    ## what it contains, or just try to find a HTTP parser lib (server side)    

    data = json.loads(data)
    print data

【讨论】:

  • 呵呵,是的 ;) 请记住,这里涉及到很多机制。您有parsing of forms datadynamicly sending requests via JavaScript或将 AJAX 部分替换为提交到 python 脚本 IP 的常规 HTML 表单)、Python socketPython parsing HTTP datapython converting GET requests to JSON strings 和最后Python talking to SVN :)
  • 在python脚本中,显然我没有访问80端口的权限。我可以看到如何在python脚本中切换端口号,但是如何在python脚本中指定不同的端口JS ?
  • 有什么方法可以测试数据是否从JS正确传输? (故障排除)
  • 就故障排除而言,在ns.recv(8192) 之后只需对该数据进行打印,您将查看传输的数据是否正确,如果您没有看到打印..没有数据被传输(逻辑)。至于端口号,好吧,只需执行xmlhttp.open("GET","http://ip.addr.com:666/wham.php",true);,这应该会导致您在端口ip.addr.com 上收到wham.php 的请求666
猜你喜欢
  • 2013-10-15
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多