2013-05-02 9 views
5

Sto implementando django-ajax-uploader in un progetto, ma voglio usare l'ultima versione di fineuploader che è attualmente sotto 3.5.0, presumibilmente, la documentazione dice che l'unica cosa che devo fare per inviare csrf_token sta mettendo dentro dizionario customHeaders:django-ajax-uploader come inviare csrf_token con fine-uploader 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 }}', },

Ecco il mio codice completo:

...  
     <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 %} 

Nel mio views.py ho: qq_file_uploader = AjaxFileUploader()

E ogni volta che cerco di caricare qualsiasi file all'interno della vista ho ottenuto un errore 403: CSRF verification failed. Request aborted.

risposta

3

utilizzare i request.params per impostare il token e inviato via posta.

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

L'ho fatto, sta funzionando proprio ora, grazie per avermi aiutato, tu sei il miglior –

+0

"params" non è corretto. È "CustomHeaders" come nella risposta di Ray. – Joel

2

Sembra che non ha seguito le istruzioni avete citato affatto. Anche l'uso corretto delle intestazioni personalizzate è descritto nella documentazione di Fine Uploader.

Rimuovere la vostra proprietà customFields interamente e modificare la vostra proprietà request a leggere:

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

Hai ragione, ho usato campi personalizzati solo per testare e mi sono perso per cambiarlo di nuovo in customHeaders prima di inviare la domanda qui, mi spiace. In ogni caso non funziona con customHeaders –

+0

Mostra il codice modificato. Inoltre, che risoluzione dei problemi hai fatto? Quando hai esaminato la richiesta non elaborata, cosa hai visto? Il token era corretto? Stai effettivamente analizzando questa intestazione lato server? "non funziona" non è abbastanza informazioni. –

+1

Ora sto inviando il 'csrfmiddlewaretoken' in request.params e il file si sta caricando correttamente, il problema era che il token non veniva inviato. Inoltre avevo bisogno di fare una modifica nelle viste da 'filename = request.GET ['qqfile']' a 'filename = request.FILES.get ('qqfile') ._ name' –

Problemi correlati