2017-04-12 110 views
0

我想通過使用jquery post方法提交表單。每次提交表單時,請求參數(request.POST)都是空的。我不確定爲什麼ajax請求無法發送參數。 JS代碼:Ajax請求Django應用程序

<script> 
$('#myform').on('submit', function(e){ 
    let username = $("#username").val(); 
    let password = $("#password").val(); 
    let url = $('#myform').attr('action'); 
    $.post(url, { 
    username:username, 
    password:password 
    }, function(d){ 
    alert('success'); 
    }); 
}); 
$('#login').click(function(e){ 
    e.preventDefault(); 
    $('#myform').submit(); 
}); 

那我在這一步做錯了什麼?如果需要,我可以使用html表單和處理表單動作url的view函數。

+0

你的請求已經CSRF? python Django的CSRF檢查與Ajax POST請求失敗 - Stack ... – cph

+1

是的,張貼HTML和視圖。 –

+0

你需要使用'post'方法嗎?你可以使用'$ .ajax()'並傳遞CSRF – Algorithmatic

回答

1

請嘗試使用以下內容,並檢查Django服務器日誌以檢查是否收到請求,以及請求狀態碼是什麼。

$.ajax({ 
     url: url, 
     data: data: { 
         username:username, 
         password:password, 
         csrfmiddlewaretoken: '{{ csrf_token }}' 
        }, 
     type: 'POST', 
     success: function(data) { 
      console.log(data.message); 
     }, 
     error: function(data) { 
      console.log(data.message); 
     } 
    }, 
+0

這似乎奏效了。謝謝。順便說一句,我從django設置中刪除了csrf中間件(只是爲了現在開始)。然而,看着你介紹的代碼,我想知道如何獲得一個csrf標記?因爲,當代碼上線時我會使用它,如果你解釋了csrf_token並且需要使用什麼值,我將不勝感激。 –

+0

Django默認提供了一個跨站點請求僞造(CSRF)令牌來保護您的視圖。您不必擔心如何創建它或它的價值,Django會照顧它。您只需在提交表單時通過使用'{{csrf_token}}'來獲取該值即可傳遞該標記。跨網站請求僞造是對網站的安全攻擊。 Django試圖通過要求所有POST請求包含令牌來保護您免受這些攻擊。閱讀[這裏](https://docs.djangoproject.com/en/1.10/ref/csrf/)以獲取更多關於CSRF的信息。 – Algorithmatic