带有jquery-tinymce图像上传插件的Django

问题描述:

我已将 http://justboil.me/ 的jbimages安装到django项目的jquery-tinymce文件夹中用于从计算机获取本地图像。

I have installed jbimages from http://justboil.me/ into jquery-tinymce folder of my django project for getting local images from computer.

当我上传图像时,它会抛出错误,因为这比平时花费的时间更长。可能发生了错误。
显示脚本输出错误为 CSRF验证失败。请求中止。
但是我已经以dialog.htm的形式提供了{%csrf_token%}。

When I upload image, it is throwing the error as "This is taking longer than usual.An error may have occurred." It is showing the script output error as "CSRF verification failed. Request aborted." But i already gave {% csrf_token %} in the form of dialog.htm.

在选择图片后出现错误,如下所示:

Iam getting the error after selecting the image as shown below:

有人可以帮我摆脱这个问题吗?

Can anyone help me how to get rid of this issue?

好像表单是使用 POST 数据中包含 csrf_token

seems like the form is being posted using ajax. If you are using ajax to post the form make sure you include the csrf_token in the POST data. which in this case you are missing.

或者将以下脚本添加到 base.html 中,它将负责更新

Alternatively add the following script to your base.html and it will take care of updating the csrf_token for each Ajax request.

$(document).ajaxSend(function(event, xhr, settings) {
    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;
    }   
    function sameOrigin(url) {
        // url could be relative or scheme relative or absolute
        var host = document.location.host; // host + port
        var protocol = document.location.protocol;
        var sr_origin = '//' + host;
        var origin = protocol + sr_origin;
        // Allow absolute or scheme relative URLs to same origin
        return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
            (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
            // or any other URL that isn't scheme relative or absolute i.e relative.
            !(/^(\/\/|http:|https:).*/.test(url));
    }   
    function safeMethod(method) {
        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
    }   

    if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
    }   
});