我在Django框架中使用JqGrid。这是JS:
jQuery("#list").jqGrid({
url:'{% url views.manage.devicesajax %}',
datatype: 'json',
mtype: 'GET',
colNames:['DID', 'UDID', 'Owner', 'Name', 'First seen', 'Last seen'],
colModel :[
{name:'did', index:'did', width: 30, searchoptions:{sopt:['eq','ne','bw','cn']}},
{name:'udid', index:'udid', width: 120, editable: true, searchoptions:{sopt:['eq','ne','bw','cn']}},
{name:'d_owner', index:'d_owner', width: 70, editable: true, searchoptions:{sopt:['eq','ne','bw','cn']}},
{name:'d_name', index:'d_name', editable: true, searchoptions:{sopt:['eq','ne','bw','cn']}},
{name:'d_firstseen', index:'d_firstseen', width: 80},
{name:'d_lastseen', index:'d_lastseen', width: 80}],
pager: jQuery('#pager'),
rowNum:20,
rowList:[20,50,100],
sortname: 'did',
sortorder: "desc",
multiselect: true,
viewrecords: true,
imgpath: 'themes/basic/images',
caption: 'Devices list',
height: 330,
width: 1000,
onSelectRow: function(id) {
var id = $("#list").getRowData(id).message_id;
message_id = id;
},
editurl: "{% url views.manage.deviceseditajax %}"
});
当我在JqGrid中编辑行时,我从editurl得到错误:
Forbidden (403) CSRF verification failed. Request aborted.
这是因为csrf_令牌不会与其他数据一起传递给editurl。 如何将csrf_令牌添加到editurl的POST请求中?在
这段代码运行得很好(完整的jqgrid init):
^{pr2}$
我不使用Django框架,也不熟悉
csrf_token
,但是在Google中搜索之后,您似乎需要在请求的HTTP报头中设置它:xhr.setRequestHeader('X-CSRF-Token', csrf_token);
。要在jqGrid中执行此操作,可以使用loadBeforeSend事件处理程序:请参阅here以了解一个非常接近的问题。在
已更新:若要在使用表单编辑时发布其他数据,可以使用
^{pr2}$editData
:editData:{csrfmiddlewaretoken:'<;%=token_value%>;'}。例如:我将两种方式都放在这里:设置'X-CSRF-Token'HTTP头和发布
csrfmiddlewaretoken
参数。你可以删除一种方法后,相应的实验。在如果对页面上的所有网格使用一些参数,则可以更好地更改默认值(有关详细信息,请参见here)
此设置对于“添加”和“编辑”窗体都是通用的。因此您可以使用简化形式的
navGrid
。在根据jqGrid documentation,可以传递一个postData选项。 如果使用的是jQuery Cookie plugin,则可以添加如下内容:
到你的jqGrid选项列表。在
CSRF_COOKIE_名称在django应用程序中设置设置.py默认为“csrftoken”。在
检查你的饼干。Django的CSRF还保存了一个cookie
csrftoken
,它的值与您将在表单中使用的CSRF_令牌相同。您可以使用任何Javascript cookie库来获取cookie并将其作为csrfmiddlewaretoken
传递给POST请求。在相关问题 更多 >
编程相关推荐