2011-02-03 11 views
20

私はDjangoアプリケーションに対してHttp DELETEリクエストをします。 301(Moved permanantly)というレスポンスを直接返し、同じURLのGETリクエストにリダイレクトします。私は、Http PUT要求がDELETE要求のように301を返すと推測しています。 djangoでDELETEリクエストを処理する方法はありますか?Http djangoへの削除リクエストは301を返します(永久に移動しました)

+8

DELETEのURLに末尾のスラッシュがありませんか? –

+0

関連するビューがまったく読み込まれているかどうか確認できますか?おそらく、ログがロードされていることを確認するためにログをビューの中に入れてください。また、これはあなたのWebサーバーであり、Djangoではなく、リクエストをリダイレクトすることができますか? –

+2

それは問題でした。私のクライアントはbackbone.jsで、backbone.jsはモデルURLに後続のスラッシュをつけません。だから、urls.pyでは、後ろにスラッシュを入れずに別のurl設定を追加していました。 – yilmazhuseyin

答えて

36

リダイレクトがAPPEND_SLASH設定によって引き起こされる:

APPEND_SLASH

デフォルト:リクエストURL は、パターンのいずれにも一致しない場合は、Trueに設定真

URLconfで、 スラッシュで終了しない場合は、HTTPリダイレクトを に発行し、同じURLにスラッシュ追加されました。 リダイレクトにより、 が失われたというPOST要求で送信された データが失われる可能性があります。

サーバーとクライアントが末尾にスラッシュを含むことを確認してください。

プロジェクトでスラッシュがまったく必要ない場合(つまり、スラッシュが付いていないapiの場合)は、無効にすることができます。それ以外の場合は、urlconfが末尾にスラッシュを付けずにパスを受け入れるようにしてください。

+1

このオプションは、angularJS 1.30.beta6の$ resourceコンポーネントに対して設定されています。https://github.com/angular/angular.js/commit/3878be52f6d95fca4c386d4a5523f3c8fcb04270 – AlexandruC

+0

おかげで、あなたは私の日を救ってくれます! –

4

AngularJsとDjango RESTを使用しているときにこの問題が発生しました。

Django Restがクライアントのリダイレクトを行い、AngularJS '$resourceのURLに末尾にダッシュがないことを確認しながら、末尾にスラッシュが付いたURLを要求しました。これはこの説明書に記載されていますissue

$resourceの代わりに、より柔軟な$httpサービスを使用するよう提案されます。しかし...私は本当に$resource(少ないコード)を使いたいと思っていました。私は維持したいと思いますので、(私は私のblogにこれに追加した

router = DefaultRouter(trailing_slash=False) 

http://django-rest-framework.org/api-guide/routers.html

だから、解決策は、DjangoのRESTチーム以来、些細だったが、このrecentlyを占めていますAngularJS & Django RESTを使用したいくつかの問題のログ

関連する問題