如何在django中应用csrf_token

时间:2014-07-31 10:00:14

标签: javascript django django-forms django-templates dropzone.js

在Django模板中不使用表单我想将文件上传到我的Web服务器。所以我使用名为dropzonejs的javascript库。

我完全按照本教程bootstrap dropzonejs进行操作。我设置了一切来运行演示。

您看到我决定不使用form,因此上传时间显然会丢失问题csrf_token

我怀疑如何在csrf_token中加入javascript

这是他们在主页中添加的有关如何添加csrf令牌的信息

  

发送 - 在每个文件发送之前调用。获取xhr对象和formData对象作为第二个和第三个参数,以便您可以修改它们(例如添加CSRF标记)或添加其他数据。

你明白我的问题吗?给我一些想法吗?

1 个答案:

答案 0 :(得分:3)

您可以拥有视图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);
相关问题