【问题标题】:Enable Django and Tastypie support for trailing slashes?启用 Django 和 Tastypie 对斜杠的支持?
【发布时间】:2012-05-20 07:43:34
【问题描述】:

我的问题是 Backbone 正在尝试对末尾带有斜杠的 URL 执行 HTTP 请求,如下所示:

:8000/api/v1/update/2/

由于某种原因,Django(或美味派)不接受末尾带有斜杠的 URL,所以上面的 URL 不起作用,但这个 URL 可以工作:

:8000/api/v1/update/2

Backbone-tastypie 回退到 oldSync,这是 Backbone 附带的原始同步,当不使用其覆盖的同步时。我相信当 Backbone-tastypie 使用 oldSync 时,它会在 URL 的末尾附加一个斜杠,这是我不想要的。

建议的大多数解决方案都是针对我遇到的相反问题。他们正在尝试解决尾部斜杠有效但没有尾部斜杠不起作用的问题。

除了非尾随斜杠之外,我还需要能够支持尾随斜杠。这可以通过两种方式解决:

  1. 如何更改主干代码,以便没有 AJAX 调用在末尾附加斜线?

  2. 如何让 Django/tastypie 将上述两个 URL 视为相同?

其中任何一个都可以解决我的问题,但我无法弄清楚如何实施其中任何一个。

【问题讨论】:

  • 你看过这个模块吗? github.com/PaulUithol/backbone-tastypie
  • @thedjpetersen 我现在正在使用 Paul 的骨干美味。它一直有效,直到主干美味使用 Backbone.sync 因为默认 URL 的末尾附加了一个斜杠。我有 fguillen 发布的链接的相反问题。我只能支持末尾没有斜杠的 URL。在上面的链接中,它们似乎只支持末尾带有斜杠的 URL。
  • 抱歉,我想我不明白:您是否要在 URL 末尾添加斜杠?
  • @fguillen 我不想在 URL 的末尾加上斜杠。当 Backbone 使用 oldSync 时,它会向末尾带有斜杠的 URL 发出 HTTP 请求。不幸的是,Django(或 Tastypie)不喜欢 URL 末尾有斜杠。我将在原始帖子的正文中添加更多详细信息。

标签: javascript django backbone.js tastypie


【解决方案1】:

对于Backbone 解决方案:

您可以覆盖Model.url 的默认行为,即使使用正常的行为并像您正在寻找的那样进行小修改:

// code simplified and not tested
var MyModel: Backbone.Model.extend({
  url: function() {
    var original_url = Backbone.Model.prototype.url.call( this );
    var parsed_url = original_url + ( original_url.charAt( original_url.length - 1 ) == '/' ? '' : '/' );

    return parsed_url;
  }
});

同样适用于Collection

【讨论】:

  • 我认为这个问题更多地与 Backbone 的默认同步行为有关。我的收藏和模型中的网址末尾没有斜线。当backbone-tastypie 使用默认的Backbone 同步时,它会在尝试同步时尝试在如下链接上执行HTTP 请求::8000/api/v1/update/2/。当我在 Backbone 中删除模型实例时,初始删除调用运行良好,因为它调用模型中指定的 URL。但是,然后它尝试使用 Backbone.oldSync,这是原始的同步方法。出于某种原因,同步会在末尾附加一个斜杠。
【解决方案2】:

你可以告诉 Tastypie/Django 允许或禁止尾部斜杠。

here

【讨论】:

  • 我认为这更像是一个骨干问题,而不是 Tastypie。我仍然收到错误,因为我正在对以斜杠结尾的 URL 进行 AJAX 调用。 Tastypie(或 Django)不喜欢带有斜杠的 URL,因此当我向末尾带有斜杠的 URL 发出请求时会出错。我怎么做才能让 Tastypie 接受末尾带有斜杠的 URL,因为现在它不接受。它只接受结尾不带斜杠的 URL。
  • 我刚刚告诉过你。如果你设置TASTYPIE_ALLOW_MISSING_SLASH = FalseAPPEND_SLASH = True Django\Tastypie URLs 将在末尾带有斜线。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
相关资源
最近更新 更多