【问题标题】:how to apply csrf_token in django如何在 django 中应用 csrf_token
【发布时间】:2014-09-23 05:29:11
【问题描述】:

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

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

你看我决定不使用form所以很明显问题csrf_token在上传发生时丢失了。

我的疑问是如何在javascript 中包含csrf_token

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

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

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

【问题讨论】:

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


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-16
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 2015-03-31
      • 2011-08-04
      • 1970-01-01
      相关资源
      最近更新 更多