如何在 django 中应用 csrf_token
Posted
技术标签:
【中文标题】如何在 django 中应用 csrf_token【英文标题】:how to apply csrf_token in django 【发布时间】:2014-09-23 05:29:11 【问题描述】:在 Django 模板中,我想在不使用表单的情况下将文件上传到我的 Web 服务器。所以为此我正在使用名为 dropzonejs 的 javascript 库。
我完全按照本教程bootstrap dropzonejs。我设置了一切来运行演示。
你看我决定不使用form
所以很明显问题csrf_token
在上传发生时丢失了。
我的疑问是如何在javascript
中包含csrf_token
。?
这是他们在主页中添加的关于如何添加 csrf 令牌的信息
sending - 在发送每个文件之前调用。获取 xhr 对象和 formData 对象作为第二个和第三个参数,因此您可以修改它们(例如添加 CSRF 令牌)或添加其他数据。
你明白我的问题吗?给我一些想法吗?
【问题讨论】:
【参考方案1】:您可以查看CSRF exempt:
from django.views.decorators.csrf import csrf_exempt
class YourView(models.View):
@csrf_exempt
def dispatch(self, *args, **kwargs):
return super(YourView, self).dispatch(*args, **kwargs)
JavaScript 配置可能类似于以下内容:
(function($)
$(function()
function getCookie(name)
var cookieValue = null;
if (document.cookie && document.cookie != '')
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++)
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '='))
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
return cookieValue;
var csrftoken = getCookie('csrftoken');
function csrfSafeMethod(method)
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
$.ajaxSetup(
crossDomain: false,
beforeSend: function(xhr, settings)
if (!csrfSafeMethod(settings.type))
xhr.setRequestHeader("X-CSRFToken", csrftoken);
);
);
)(jQuery);
【讨论】:
以上是关于如何在 django 中应用 csrf_token的主要内容,如果未能解决你的问题,请参考以下文章
30_Django中关于使用ajax发送请求中`csrf_token`的问题和解决
如何在 jinja2 模板引擎中进行 csrf_token 保护?