2012-05-11 60 views
4

我的問題是骨幹,是試圖在年底做一個URL的HTTP請求以斜線,類似如下:啓用Django和Tastypie支持尾部斜線?

:8000/api/v1/update/2/ 

出於某種原因,Django的(或tastypie)不接受的網址用斜槓在年底,所以上面的網址將無法正常工作,但是這個URL做工作:

:8000/api/v1/update/2 

骨幹,tastypie回落到oldSync,這是自帶的骨幹不使用其覆蓋的同步時,原來的同步。我相信,當Backbone-tastypie使用oldSync時,它會在網址末尾添加一個斜槓,這是我不想要的。

建議的大多數解決方案都是處理我遇到的相反問題。他們正試圖解決尾部斜槓工作的問題,但是沒有尾部斜線不起作用。

我需要能夠支持除了非尾隨斜線之外的斜線。這個問題可以有兩種方式:

  1. 如何更改骨幹,tastypie代碼,以便沒有AJAX調用的末尾添加斜線?

  2. 我該如何使Django/tastypie將上述兩個URL視爲相同?

其中之一將解決我的問題,但我不知道如何實現它們中的任何一個。

+0

你看過這個模塊嗎? https://github.com/PaulUithol/backbone-tastypie – thedjpetersen

+0

有關? http://stackoverflow.com/questions/4891879/http-delete-request-to-django-returns-a-301moved-permenantly – fguillen

+0

@thedjpetersen我現在正在使用Paul的骨幹-tastypie。它會一直運行直到backbone-tastypie使用Backbone.sync,因爲默認的URL在最後加了一個斜線。我有與fguillen發佈的鏈接相反的問題。我只能夠支持不添加斜線的URL。在上面的鏈接中,似乎他們最終只支持帶斜槓的網址。 – egidra

回答

5

對於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; 
    } 
}); 

同aplies爲Collection

+0

我認爲這個問題與Backbone的默認同步行爲有關。我的集合和模型中的網址在最後沒有斜線。當backbone-tastypie使用默認的Backbone同步時,它會嘗試在鏈接上執行HTTP請求,例如:8000/api/v1/update/2 /。當我在Backbone中刪除模型實例時,初始刪除調用很有效,因爲它調用了模型中指定的URL。但是,它會嘗試使用Backbone.oldSync,這是最初的同步方法。出於某種原因,同步會在最後附加一個斜槓。 – egidra

7

您可以告訴Tastypie/Django允許或禁止尾隨斜線。

Look here

+0

我認爲這比Tastypie更像是一個Backbone問題。我仍然遇到錯誤,因爲我正在對以斜線結尾的URL進行AJAX調用。 Tastypie(或Django)不喜歡帶斜線的網址,因此當我在最後使用斜線向網址發送請求時,會出現錯誤。我如何做到這一點,所以Tastypie最終接受了帶有斜線的網址,因爲現在它沒有。它只接受最後沒有斜線的網址。 – egidra

+1

我剛剛告訴過你。如果您設置了'TASTYPIE_ALLOW_MISSING_SLASH = False'和'APPEND_SLASH = True',則Django \ Tastypie網址最後將以斜線顯示。 – astevanovic