ckan.toolkit.redirect_to不重定向

时间:2018-12-26 11:24:46

标签: python-2.7 ckan

我目前正在开发一个ckan扩展名,在这里我需要重定向到另一个域上的url。

在我的插件中,我定义了一个自定义动作函数:

@side_effect_free
def download_json(context, data_dict):
    toolkit.redirect_to('http://my.json-builder.com?id=1234')

但是当我调用此端点时,我只会得到以下响应:

response screenshot

因此,我假定已调用动作函数,但redirect_to调用不会重定向到我定义的网址。

感谢您的帮助! 弗洛里安

1 个答案:

答案 0 :(得分:0)

弄清楚您要完成的目标有点困难,但是我希望这对您有所帮助。

简短答案:

否,您无法从CKAN中的API端点重定向。 CKAN中的端点响应已建立,并期望您的操作中能做出某些反应。您的操作应返回某种结果。在您的情况下,除了尝试重定向外,它什么也不返回。带有IActions的逻辑动作函数与“蓝图”或“铁塔”控制器动作不同。

请参阅Making an API request文档,特别是CKAN中API响应的细分。另外,您可以查看构建API响应的pylons implementationflask blueprints implementation

更多信息可帮助您解决问题:

您说您正在尝试调用将用户重定向到另一个域URL的终结点。基于此,请考虑以下内容:

  1. 我想您想做的第一件事就是拥有一个URL,该URL可以使某人通过您站点的Web界面进入该URL,然后将其重定向到另一个站点。在这种情况下,您的示例代码toolkit.redirect_to('http://my.json-builder.com?id=1234')是有意义的,并且适用于使用IRoutes或由其实现的自定义控制器动作,或者如果您使用的是flask,则使用IBlueprint。用户将转到您网站上的URL,例如http://localhost.com/download_json,并在其浏览器中被重定向到新的URL /网站。
  2. 如果您打算将其作为其他用户的API调用,这会开始有些奇怪。如果用户使用您的API,则他们希望使用JSON来从您的网站获取结果CKAN的API旨在返回JSON。消耗您API端点的人不会期望重定向到另一个站点,例如如果我叫http://localhost.com/api/3/action/download_json,我希望得到一个

    之类的JSON对象。

    { help: "http://localhost/api/3/action/help_show?name=download_json", success: true, result: { ... } }

    他们会寻找success以确保该呼叫能够正常工作,然后他们会使用result继续进行所需的过程。如果您确实希望某人通过API获得重定向信息,则可能会返回重定向网址,例如result: {'redirect_url': 'http://my.json-builder.com?id=1234'}并将其很好地记录在扩展程序的API文档中(例如,为什么要返回此终结点,您希望某人对此做什么等)。

  3. 如果这是您自己的扩展程序的API调用,我想您正在尝试使用my.json-builder.com来构建某个内容的json(也许是数据集?),并将该json作为结果返回给您的端点,甚至可能消耗结果来做其他事情?在这种情况下,您可以在函数中调用my.json-builder.com,处理结果并将结果返回给用户。在这种情况下,您实际上并不想将用户重定向到新站点,而是打电话到新站点以获得一些结果。如果您确实想要扩展的结果,则不需要其他端点。您可以通过分机拨打电话,使用结果并返回您要创建的所需对象。

希望这会有所帮助,如果我完全错过了理解的话,对不起。