2012-05-23 48 views
1

我试图从页面发送HTML表单输入到python脚本。这仅仅是为了测试目的,所以忽略糟糕的代码。基本上我不知道如何定义action=部分来引用python脚本中的search()函数。我只需要获得基本功能的工作。我使用的web2py作为框架这可能是相关的:将HTML表单输入发送到python脚本

控制器:default.py

def index(): 
    return dict() 

def search(): 
    import urllib 
    q=request.vars.q 
    result1 = urllib.urlopen('http://www.google.com/search?q=%s' % q) 
    return dict(result1=result1) 

默认/ search.html:

{{extend 'layout.html'}} 
<form method=get action=???> 
<input name=q> 
<input type=submit value=search> 
</form> 

回答

1

它看起来像本身所服务的形式通过搜索()函数,所以你可以设置action="",它会提交回search()函数。另外,您应该在HTML属性值周围加引号,并且应该添加一些逻辑来检查request.vars.q中是否有任何内容,因为当页面首次使用空格式加载时,没有要处理的查询。

+0

感谢这个安东尼,但它似乎并没有工作。当我在搜索框中输入一个字时,页面会再次打开,并显示空白搜索框。另外关于逻辑,request.vars.q不会只在表单被提交时才起作用。按照逻辑,你的意思是'如果request.vars.q为null:做某事'? – adohertyd

+0

当您提交查询时没有显示任何内容,因为您的视图对结果没有任何影响 - 它只显示表单。问题在于结果是来自Google的完整HTML网页,因此您无法轻易将其显示在您的网页中(您必须进行一些调整才能提取相关内容)。是的,通过逻辑,我的意思是'如果request.vars.q:[make the query]''。 – Anthony

+0

感谢您的好评安东尼非常赞赏 – adohertyd

1

你在那里做什么对于GET请求是正确的。对于POST请求,您需要传递字段作为数据参数。

urllib.urlopen('http://www.google.com/search', data=urllib.urlencode({'q':'FOO'})) 

将搜索作为POST请求进行搜索。

请参阅here了解更多信息。

+0

的确,但这只是一个愚蠢的例子。 Google向该请求返回“405:不允许的方法”。 – Peter

+0

但Google搜索应该是GET请求,而不是POST。另外,上面的'data'参数应该是'urllib.urlencode({'q':'FOO'})''。 – Anthony

+0

好的,但你回答这个例子有什么问题? – Anthony

相关问题