2011-06-23 53 views
0

我在Django模板中使用JqGrid。它工作正常,直到向網格添加新行。 我在導航面板上使用此「+」按鈕。問題是當我點擊「添加記錄」對話框中的「提交」時,出現HTTP 403錯誤。 如果我改變editurl「/ AJAX /股票/加」(去掉最後一個斜線)出現HTTP 500錯誤。用Django向JqGrid添加行

有人知道問題可以在這裏嗎? 在瀏覽器中,查詢到http://127.0.0.1:8000/ajax/stocks/add/(使用的django dev服務器)如​​預期的那樣返回True。

而且我不完全理解什麼ajax_stock_add_view功能應該做的。 它是否應該返回成功狀態或其他回報?

這裏是我的Django的模板:

{% block extrascript %} 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      jQuery("#stocks-grid").jqGrid(
        { url:'/ajax/stocks/', datatype: "json", colNames:['Name','Comment'], 
         colModel:[ 
          {name:'name',index:'name', editable:true}, 
          {name:'comment',index:'comment', editable:true} 
         ], 

         editurl : "/ajax/stocks/add/", rowNum:10, pager: '#stocks-grid-pager', sortname: 'name', viewrecords: true}); 
      jQuery("#stocks-grid").jqGrid('navGrid', '#stocks-grid-pager'); 
     }); 
    </script> {% endblock %} 

{% block content %} 
    <table id="stocks-grid"></table> 
    <div id="stocks-grid-pager"></div> {% endblock %} 

這裏是urls.py:

... 
    (r'^ajax/stocks/$', ajax_stocks_view), 
    (r'^ajax/stocks/add/$', ajax_stocks_add_view), 
... 

和views.py中

def ajax_stocks_view(request): 
    json = get_grid_json(Stock) 
    return HttpResponse(json, mimetype='application/json') 

def ajax_stocks_add_view(request): 
    return HttpResponse(True) 

回答

0

問題在CSRF protection in Django左右。 在我的情況下,JqGrid創建了一個沒有CSRF標記的表單,所以CSRF驗證失敗了。 Here是一個很好的解決方案。

1

這取決於你究竟是如何努力設置它。如果你有一個表單創建一個新的項目,當用戶提交您希望新項目保存到數據庫,並追加到網格,那麼這裏就是你的過程:

  1. 用戶提交表單
  2. 表通過AJAX請求發送到服務器到/ ajax/stocks/add/
  3. 查看/ ajax/stocks/add /將項目添加到數據庫並返回響應(您必須發送某種實際響應True不是響應但'[{"success":true}]'(JSON)是,在適當的MIME類型。)
  4. 客戶端從視圖在接收響應/ AJAX /股/添加/。如果請求成功,則JavaScript附加到網格,否則會向用戶顯示錯誤。
+0

感謝您的解釋。就JqGrid而言,我應該使用afterSubmit事件。我試過了,但事件沒有打電話。這是因爲我還沒有解決的HTTP錯誤。 –