将PloneFormGen数据发布到自定义脚本适配器中的外部站点

时间:2012-10-16 19:04:18

标签: plone ploneformgen

有没有办法将PloneFormGen表单数据传递到外部站点并在自定义脚本适配器中发布请求?

我的外部网站只能由服务器

显示

帖子的网址为http://app.com/issues_form/issues

自定义stript适配器中的脚本:

import urllib
import urllib2

url = "http://app.com/issues_form/issues"
values = {'issue' : request.form['issue'] }
data = urllib.urlencode(values)
urllib2.Request(url,data)

提交时,我会获得未经授权的访问或具有权限的内容

http://ploneapp.com/acl_users/credentials_cookie_auth/require_login?came_from=http%3A/ploneapp.com/structure/test/issue_form

当我使用urllib.urlencode时,似乎发生了错误。

当我尝试使用'requests'库的另一种方式时,它是一样的。也许我无法在这些地方访问这些库。

2 个答案:

答案 0 :(得分:5)

除非您绕过某些安全性 - 这是不可取的,否则无法通过自定义脚本适配器实现。问题是urllib和urllib2库在受限制的Python中没有被标记为“安全”。 “Restricted Python”是可用于TTW脚本的Python子集。

如果您需要执行此类操作,则需要添加文件系统产品,可能是浏览器视图。您可以在Plone.Org的产品部分找到使用PFG输入执行此操作的软件包示例。大多数人都关注外部支付或会员制度。你会发现他们处理很多棘手的问题,比如线程和超时,以确保Plone不会等待帖子处理。

答案 1 :(得分:1)

实际上,如果您将浏览器重定向到新网站,浏览器会自动将表单及其所有数据重新发布到该系统。 确实,它不是在用户隐藏的幕后发送这些数据,但现在传递数据的站点现在可以开始显示其他选项/处理它。 例如,如果存在需要向其发布字段的付费在线类型服务,则这是好的。如信用卡处理。

然而,“隐藏”系统并没有那么好。还有一些用途。

以下内容应该有效。我使用不同的版本获取文件夹中的图像列表,并随机选择一个在网站上显示。


# REDIRECTING to a specific URL
# NOTE: Form Submissions will cause the browser to resend the data to the new site.
# get the HTML request and response objects.
# redirect the page to the other site and end function at the same time
return context.REQUEST.RESPONSE.redirect("http://app.com/issues_form/issues")