2012-07-08 41 views
2

我是新手Python程序员,我有麻烦找一个工具来帮助我从一个javascript索取表格。我已经在python中编写了一个小脚本,并且在javascript中也有一个简单的界面。用户需要在浏览器中选择一些项目,然后javascript返回一个sendForm()。然后我想用我的python脚本恢复表单。我知道我可以用javascript生成一个xml文件,并告诉我的python脚本等待它的创建,然后捕获它(用os.path.exist(..)),但我想避免这种情况。我已经看到,库,如CGI,机械化,pyjs,(硒?)存在接口Python和HTML,JavaScript,但我找不到要使用哪一个或者是否会有另一种工具,将很容易处理恢复的形式。让JavaScript的形式,内容与Python

更多信息:在Python脚本生成由JavaScript读取XML。用户选择javascript中的项目(带有复选框),然后通过javascript在XML中进行标记。然后,javascript在隐藏字段中输出修改后的xml,并且这是我希望在创建后用我的python脚本检索的这个修改过的xml。

谢谢大家了很多的帮助

+5

欢迎堆栈溢出!我很抱歉,但我很难弄清楚你在这里问的问题。如果您包含一些代码以显示您尝试过的内容,它会有所帮助,这会让我们更容易帮助您。也许你也可以看一下http://whathaveyoutried.com关于如何提出好问题的伟大文章? – 2012-07-08 14:16:12

+1

我无法理解您是否试图抓取您无法控制的现有网站,或者在您实际拥有的网站上工作。这是什么? [机械化](http://wwwsearch.sourceforge.net/mechanize/)听起来像你想要的。阅读示例,看看它是否适合您的需求。如果您遇到问题,请回复并发布您使用的代码和遇到的问题(包括回溯)。 – ChrisP 2012-07-08 14:24:04

+0

@ChrisP:可以机械化与'javascript'交互吗?虽然OP的问题还不够清楚,但我相信他正在尝试做一些'javascript'的事情。 – RanRag 2012-07-08 14:27:04

回答

0

你的系统是一个Web应用程序,如果是这样你的JavaScript可以张贴到Python使用AJAX后端。然后你可以加密一个表单到json字符串并发送到后端,在后面你可以把这个字符串解析成python变量...... Javascript它自己不能访问你的本地文件,除非你在本地运行它(但它是真的limitted)

我建议你应该尝试一个Web框架的工作像Django的。在一天内学习很容易。

2

感谢澄清的意见。由于您正在构建网站,因此您需要使用AJAX调用python Web应用程序并返回一些内容(可能是XML,尽管我建议阅读有关JSON的内容)。在我看来,您还没有解决您的问题的最佳解决方案,但这是另一个问题。我不明白为什么要用python生成xml,用JavaScript读取它,用JavaScript更新它,然后在表单提交中用Python再次阅读它。对于初学者,想想如果你的用户禁用JavaScript会发生什么。

不管怎么说,我建议阅读有关FlaskjQuery上手。然后,您的应用程序可能看起来像这样在Python:

from flask import Flask 
app = Flask(__name__) 

@app.route('/', methods=['POST', 'GET']) 
def foo(): 
    if request.method == 'GET': 
     # Generate the XML 
     return myXML 
    if request.method == 'POST': 
     # Read that hidden field 
     xml = request.form['the_hidden_xml'] 
     # Do what you will 
     return render_template('homepage.html') 

if __name__ == "__main__": 
    app.run() 

的javascipt的可能做到这一点:

function buildTheForm() { 
    $.get('/', function(data) { 
     // handle the xml in data 
     alert('Load was performed.'); 
    }); 
} 

形式可能做到这一点:

<form action="/" method="post">