2013-05-02 7 views
5

Ich implementiere django-ajax-uploader in einem Projekt, aber ich möchte die neueste Version von fineuploader verwenden, die derzeit unter 3.5.0 ist, als Dokumentation das einzige, was sagt soll ich tun csrf_token senden ist es in Custom Wörterbuch setzen:django-ajax-uploader csrf_token mit fine-uploader senden 3.5.0

If you want to use the latest version of Fine Uploader, as valum's file-uploader is now called, instead of the one bundled with django-ajax-uploader, you can do so by replacing the params arguments in the above template with the following customHeaders:

customHeaders: { 'X-CSRFToken': '{{ csrf_token }}', },

Hier meinen vollen Code:

...  
     <h1>qq-file-uploader</h1> 
     <div id="upload-button" class="btn btn-primary"><i class="icon icon-cloud-upload icon-white"></i> Selecciona un archivo</div> 
     <div id="file-upload"></div> 
    </form> 
{% endblock %} 

{% block styles %} 
    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}js/libs/jquery.fineuploader-3.5.0/fineuploader-3.5.0.css"/> 
{% endblock %} 

{% block javascript %} 
    <script type="text/javascript" src="{{ STATIC_URL }}js/libs/jquery.fineuploader-3.5.0/jquery.fineuploader-3.5.0.min.js"></script> 
    <script type="text/javascript"> 
     $(function(){ 
      $('div#file-upload').fineUploader({ 
       customHeaders: { 
        'X-CSRFToken': '{{ csrf_token }}' 
       }, 
       request: { 
        endpoint: '{% url 'documents:qq_file_uploader' %}' 
       }, 
       button: $('div#upload-button'), 
       multiple: false, 
      }); 
     }); 
    </script> 
{% endblock %} 

In meinem views.py ich habe: qq_file_uploader = AjaxFileUploader()

Und jedes Mal wenn ich versuche, jede Datei in der Ansicht ein laden Ich habe einen Fehler 403: CSRF verification failed. Request aborted.

Antwort

3

die request.params verwenden das Token zu setzen und schickte es per Post.

... 
request: { 
    endpoint: '{% url 'documents:qq_file_uploader' %}', 
    params: { 
     'csrfmiddlewaretoken': '{{ csrf_token }}' 
    } 
}, 
... 
+1

Ich tat das, arbeitet gerade jetzt, danke, dass Sie mir geholfen haben, Sie sind der beste –

+0

"params" ist falsch. Es ist "customHeaders" wie in Rays Antwort. – Joel

2

Es sieht aus wie Sie nicht folgen Sie den Anweisungen haben Sie überhaupt zitiert. Die ordnungsgemäße Verwendung von benutzerdefinierten Headern wird auch in der Dokumentation zu Fine Uploader beschrieben.

Entfernen Sie Ihre customFields Eigenschaft ganz und ändern Sie Ihre request Eigenschaft zu lesen:

request: { 
    endpoint: '{% url 'documents:qq_file_uploader' %}' 
    customHeaders: { 
     X-CSRFToken': '{{ csrf_token }}' 
    } 
} 
+0

Sie haben recht, ich habe CustomFields nur zum Testen verwendet und ich habe es versäumt, es noch einmal in customHeaders zu ändern, bevor ich die Frage hier einreiche, sorry. Anyways arbeitet nicht mit customHeaders –

+0

Zeigen Sie Ihren modifizierten Code. Welche Fehlerbehebung hast du auch gemacht? Als Sie die rohe Anfrage untersucht haben, was haben Sie gesehen? War das Token korrekt? Analysieren Sie diese Header-Server-Seite? "funktioniert nicht" ist nicht genug Information. –

+1

Jetzt sende ich die "csrfmiddlewaretoken" in request.params und die Datei wird korrekt hochgeladen, das Problem war, dass Token nicht gesendet wurde. Außerdem musste ich eine Änderung in den Ansichten von 'filename = request.GET ['qqfile']' zu 'filename = request.FILES.get ('qqfile') ._ name' machen. –

Verwandte Themen