はい、動作しました。あなたがする必要があるのはcsfrトークンを渡すことです:
SessionAuthentication
この認証スキームは、組み込みのDjangoセッションを使用して、ユーザーがログに記録されているかどうかを確認します。これは通常、APIがホストされているのと同じサイトでJavascriptによって使用される場合に役立ちます。
ユーザーがログインし、アクティブなセッションを持っている必要があります。また、有効なCSRFトークンが必要です。
これは、jQueryでそれを行う方法です。
// sending a csrftoken with every ajax request
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
crossDomain: false, // obviates need for sameOrigin test
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type)) {
xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
}
}
});
$.ajax({
type: "POST",
// ...
と書かれている部分に注目してください$.cookie('csrftoken')
。Djangoが設定したCookieからcsrfトークンを取得します。
アップデート:
DjangoがFirefoxとOperaでCookieを設定しないという問題がありました。テンプレートタグ{% csrf_token %}
をテンプレートに入れると、これが解決します。正しい解決策は、おそらくデコレータを使用することensure_csrf_cookie()
です。