【问题标题】:Sending HTML form input to python script将 HTML 表单输入发送到 python 脚本
【发布时间】:2012-05-23 23:39:04
【问题描述】:

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

控制器: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>

【问题讨论】:

    标签: python html get web2py


    【解决方案1】:

    看起来表单本身是通过 search() 函数提供的,所以您只需设置action="",它就会提交回 search() 函数。此外,您应该在 HTML 属性值周围加上引号,并且应该添加一些逻辑来检查 request.vars.q 中是否有任何内容,因为当页面第一次加载空表单时,没有要处理的查询。

    【讨论】:

    • 感谢这位 Anthony,但它似乎不起作用。当我在搜索框中输入一个词时,页面会再次打开,并带有一个空白搜索框。同样关于逻辑, request.vars.q 不会仅在提交表单时才起作用吗?你说的逻辑是if request.vars.q is null: do something吗?
    • 提交查询时没有显示任何内容,因为您的视图对结果没有任何作用——它只显示表单。问题是结果是来自 Google 的完整 HTML 网页,因此您不能轻易地在您的页面中显示它(您必须进行一些抓取以提取相关内容)。是的,按逻辑,我的意思是if request.vars.q: [make the query]
    • 感谢 Anthony 的大力投入,非常感谢
    【解决方案2】:

    您在此处所做的操作对于 GET 请求是正确的。对于POST 请求,您需要将字段作为数据参数传递。

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

    例如以POST 请求的形式进行搜索。

    请参阅here 了解更多信息。

    【讨论】:

    • 确实如此,但这只是一个愚蠢的例子。 Google 会向该请求返回“405:不允许的方法”。
    • 但是 Google 搜索应该是 GET 请求,而不是 POST。另外,上面的data 参数应该是urllib.urlencode({'q': 'FOO'})
    • 好的,但是你用这个例子回答了什么问题?
    • 我对这个问题的理解是,提问者有一个网站,他希望通过编写为他填写表格的 hacky python 脚本来测试,就好像它们在 web 浏览器中一样。他不明白如何让python分别产生GETPOST请求。
    • 不,我认为他只是有一个表单,他想在他的 default.py 控制器文件中发布到 search() 函数。然后将表单中“q”字段的值用作 Google 搜索的查询(他已经在 web2py 邮件列表中提出了相关问题)。
    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 2012-07-18
    相关资源
    最近更新 更多