簡體   English   中英

Ajax發布到Django禁止查看CSRF

[英]Ajax post to Django view CSRF forbidden

問題

CSRF阻止我發布到Django視圖。

我正在遵循官方django文檔和以下問題的解決方案: Django CSRF檢查失敗,並帶有Ajax POST請求 一切都應該設置正確,但是執行失敗。

我的設置如下

jQuery發布方法:

var send_data = { 'name': place.name, 'address': address};

var csrftoken = $.cookie('csrftoken'); 

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", csrftoken);
        }
    }
});

$.ajax({ url: '/results/',
    type: 'POST',
    data: send_data,
    success: function(response) {
      $('#results').html(response);
    }
  });

Django視圖:

def results(request):
    return render(request, "stamped/restaurant.html")

Urls.py

urlpatterns = patterns('',
    url(r'^$', views.home, name='home'),
    url(r'results/', views.results, name='results'),
)

一切都應該沒問題。 對我缺少的東西有任何想法嗎?

我也累了:

由於CSRF無法將jQuery $ .post數據發送到Django中的視圖

jQuery Ajax發布到Django視圖

錯誤輸出:

在此處輸入圖片說明

更新:

這個問題中的代碼是正確的。 看來我的瀏覽器緩存需要清空。

在您的問題中,您缺少模板中的模板標簽{{ csrf_token }}

從文檔:

如果您的視圖未呈現包含csrf_token模板標記的模板,則Django可能未設置CSRF令牌cookie。 在將表單動態添加到頁面的情況下,這很常見。 為了解決這種情況,Django提供了一個視圖裝飾器來強制設置cookie:sure_csrf_cookie()。

解:

清空瀏覽器緩存。 上面的代碼是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM