0

GET リクエストを実行できますが、POST を実行すると、Chrome 開発者ツールに「リソースの読み込みに失敗しました: サーバーは 500 のステータスで応答しました (INTERNAL SERVER ERROR)」と表示されます。

問題は Django の csrf_token にあると思ったので、次の解決策を見つけました。

.config(function($httpProvider){
    $httpProvider.defaults.headers.common['X-CSRFToken'] = CSRF_TOKEN;
});

index.htmlの には、次の<head>ものがあります。

<script>
    CSRF_TOKEN = '{{ csrf_token }}';
</script>

しかし、それでも 500 エラーが発生します。私は何か間違ったことをしていますか、問題は csrf にありませんか?

PSCSRF_TOKENは前に宣言されています

<script src="{{ STATIC_URL }}lib/angular/angular.js"></script>

およびその他のスクリプト。

4

3 に答える 3

3

私は問題を理解しました。

デフォルトでは、Django は URL にスラッシュを追加します。入力した場合:

http://mydjangosite.com/pageDjango は次の場所にリダイレクトします。http://mydjangosite.com/page/

Angular$resourceは末尾のスラッシュを削除します (これについては github で読むことができます: https://github.com/angular/angular.js/issues/992 )。

Django には APPEND_SLASH 設定があり、HTTP 302 リダイレクトを使用して、スラッシュのない URL にスラッシュを追加します。これは GET メソッドでは機能しますが、他のメソッド (POST、PUT、DELETE) では機能しません。これは、リダイレクトがデータを新しい URL に渡すことができないためです。

そのため、次の 2 つのオプションがあります。

1)$httpの挿入を使用$resource

また

2) Django に次のsettings.py行を追加します。

APPEND_SLASH = False

そして、urls.pyすべての末尾のスラッシュを削除します

于 2013-05-28T02:12:26.423 に答える