将表单数据传递给Python
我有一个HTML表单,里面有一些数据,我想把这些数据发送到我的SVN(一个版本控制系统)。因为HTML和JavaScript本身没有办法直接做到这一点,所以我想用Python来作为表单和SVN之间的桥梁。我的问题是,我不知道怎么把数据从HTML/JavaScript发送到Python,因为这两者都是在客户端运行的(没有服务器参与)。
我想象中的情况是,用户填写完表单后,点击一个“提交”按钮,这样就能调用一个Python脚本,并把他们填写的表单数据作为参数传递过去。
我查了一下,发现很多人是在服务器端运行Python,然后从他们的JavaScript通过POST请求发送数据,但因为我没有服务器,所以我觉得这对我来说不太可能。
那么,如果HTML和JavaScript都是在客户端,是否有办法把数据发送到Python呢?
补充一下,我在Python和JavaScript方面有不错的基础。
1 个回答
这里有几种将Python和JavaScript结合起来的有趣方法:
注意:因为你提到你没有服务器,所以你用JavaScript发出的请求必须指向Python代码运行的socket的监听端口。其实很简单,只需让Python监听80端口,然后JavaScript就可以直接向这个端口发送请求,无需多想。
基本上,你可以在HTML表单中使用JavaScript的 onSubmit()
或者一个 按钮,这个按钮会调用上面提到的 AJAX
代码,然后让Python读取 JSON
数据(根据链接顶部显示的 JSON格式
来构建 <form>
数据)。
下面是如何通过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 时,要格式正确,比如 '
是不允许的,必须用 "
!
在我的链接中,这部分是向“服务器”(Python脚本)发送GET请求的重要部分:
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