<p>我不使用Django框架,也不熟悉<code>csrf_token</code>,但是在Google中搜索之后,您似乎需要在请求的HTTP报头中设置它:<code>xhr.setRequestHeader('X-CSRF-Token', csrf_token);</code>。要在jqGrid中执行此操作,可以使用<a href="http://www.trirand.com/jqgridwiki/doku.php?id=wiki:events#list_of_events" rel="nofollow noreferrer">loadBeforeSend</a>事件处理程序:</p>
<pre><code>loadBeforeSend: function(jqXHR) {
// you should modify the next line to get the CSRF tocken
// in any way (for example $('meta[name=csrf]').attr('content')
// if you have <meta name="csrf" content="abcdefjklmnopqrstuvwxyz="/>)
var csrf_token = '<%= token_value %>'; // any way to get
jqXHR.setRequestHeader('X-CSRF-Token', csrf_token);
}
</code></pre>
<p>请参阅<a href="https://stackoverflow.com/questions/5706579/how-to-set-request-header-to-the-ajax-object-for-jqgrid/5706690#5706690">here</a>以了解一个非常接近的问题。在</p>
<p><strong>已更新</strong>:若要在使用表单编辑时发布其他数据,可以使用<code>editData</code>:editData:{csrfmiddlewaretoken:'<;%=token_value%>;'}。例如:</p>
^{pr2}$
<p>我将两种方式都放在这里:设置'X-CSRF-Token'HTTP头和发布<code>csrfmiddlewaretoken</code>参数。你可以删除一种方法后,相应的实验。在</p>
<p>如果对页面上的所有网格使用一些参数,则可以更好地更改默认值(有关详细信息,请参见<a href="https://stackoverflow.com/questions/2675625/setting-the-content-type-of-requests-performed-by-jquery-jqgrid/2678731#2678731">here</a>)</p>
<pre><code>jQuery.extend(jQuery.jgrid.edit, {
recreateForm:true,
reloadAfterSubmit:false,
closeOnEscape:true,
savekey: [true,13],
closeAfterAdd:true,
closeAfterEdit:true,
ajaxEditOptions: {
beforeSend: function(jqXHR) {
// you should modify the next line to get the CSRF tocken
// in any way (for example $('meta[name=csrf]').attr('content')
// if you have <meta name="csrf" content="abcdefjklmnopqrstuvwxyz="/>)
var csrf_token = '<%= token_value %>'; // any way to get
jqXHR.setRequestHeader('X-CSRF-Token', csrf_token);
}
},
editData: {
csrfmiddlewaretoken: '<%= token_value %>'
}
});
</code></pre>
<p>此设置对于“添加”和“编辑”窗体都是通用的。因此您可以使用简化形式的<code>navGrid</code>。在</p>
<pre><code>jQuery("#list").jqGrid('navGrid','#pager');
</code></pre>