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

在自定义脚本适配器中将PloneFormGen数据发布到外部站点,plone,ploneformgen,Plone,Ploneformgen,有没有一种方法可以通过自定义脚本适配器中的post请求将PloneFormGen表单数据传递到外部站点 我的外部站点仅由服务器可见 帖子的url是http://app.com/issues_form/issues 自定义剥离适配器中的我的脚本: import urllib import urllib2 url = "http://app.com/issues_form/issues" values = {'issue' : request.form['issue'] } data = urll

有没有一种方法可以通过自定义脚本适配器中的post请求将PloneFormGen表单数据传递到外部站点

我的外部站点仅由服务器可见

帖子的url是
http://app.com/issues_form/issues

自定义剥离适配器中的我的脚本:

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时,似乎发生了错误


当我尝试用另一种方式处理“请求”库时也是如此。也许我无法在这样的地方访问这样的库。

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


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

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


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

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

然而,对于“隐藏”系统来说,没有什么比这更好的了。这仍然有一些用途

以下几点应该行得通。我使用另一个版本,在文件夹中获取图像列表,然后随机选择一个显示在站点上




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

然而,对于“隐藏”系统来说,没有什么比这更好的了。这仍然有一些用途

以下几点应该行得通。我使用另一个版本,在文件夹中获取图像列表,然后随机选择一个显示在站点上




如上所述,在设置为
afterValidationOverride
的python脚本中执行重定向时,post数据(=所有表单字段)丢失。我需要将这些参数附加到url中:从ZTUtils导入make_query querystr=make_query(context.REQUEST.form)返回context.REQUEST.RESPONSE.redirect(“?”+querystr)如果这不是表单的默认操作,则会丢失数据。我能够让它工作的唯一方法是重定向,即重写操作。这是在任何验证之前。我同意,验证之后的重定向是一个更好的解决方案,因此您不必编写另一个验证。在python脚本中执行重定向时,post数据(=所有表单字段)丢失,该脚本设置为
afterValidationOverride
,如上所述。我需要将这些参数附加到url中:从ZTUtils导入make_query querystr=make_query(context.REQUEST.form)返回context.REQUEST.RESPONSE.redirect(“?”+querystr)如果这不是表单的默认操作,则会丢失数据。我能够让它工作的唯一方法是重定向,即重写操作。这是在任何验证之前。我同意,在验证之后重定向将是更好的解决方案,因此您不必编写另一个验证。。
# 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")