2012-12-21 5 views
6

Zainstalowałem jbimages z http://justboil.me/ w folderze jquery-tinymce mojego projektu django, służącego do pobierania lokalnych obrazów z komputera.Django z wtyczką do wysyłania obrazu jquery-tinymce

Po przesłaniu obrazu błąd jest zgłaszany jako "trwa to dłużej niż zwykle. Wystąpił błąd." Wyświetla błąd wyjścia skryptu, ponieważ "Weryfikacja CSRF nie powiodła się. Żądanie przerwane." Ale już dałem {% csrf_token%} w postaci okna dialogowego.htm.

enter image description here

Iam uzyskiwanie błąd po wybraniu wizerunku, jak pokazano poniżej:

enter image description here

Czy ktoś może mi pomóc w jaki sposób pozbyć się tego problemu?

+0

Czy to żądanie ajax? – Ahsan

Odpowiedz

0

Jeśli próbujesz przesłać obraz za pomocą żądania ajax, musisz koniecznie obejrzeć CSRF validation in ajax.

ALBO jeśli nie, to pytanie może pomóc Ci THIS.

+0

Nie używam widoków django bezpośrednio do tego jbimages. Używam w tym edytora tinymce html. Używam wtyczki "jbimages", a ona wyrenderuje szczegóły wtyczki. W tym czasie to pokazuje. Inne, to działa. – Raji

1

Wygląda na to, że formularz jest publikowany za pomocą ajax. Jeśli używasz ajaxa do opublikowania formularza, upewnij się, że zawiera on dane csrf_token w danych POST. którego w tym przypadku brakuje.

Można również dodać następujący skrypt do swojego base.html i zajmie się on aktualizacją csrf_token dla każdego żądania Ajax.

CSRF_AJAX_PATCH

$(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')); 
    } 
});