2013-05-02 88 views
5

我在項目中實現了django-ajax-uploader,但是我想要使用當前在3.5.0下的最新版本的fineuploader,作爲文檔說我應該做派csrf_token的唯一事情就是把它裏面customHeaders詞典:django-ajax-uploader如何用fine-uploader發送csrf_token 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 }}', },

這裏是我的全碼:

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

在我views.py我:qq_file_uploader = AjaxFileUploader()

每次我嘗試上傳視圖中的任何文件時,我得到一個403錯誤:CSRF verification failed. Request aborted.

回答

3

使用request.params設置令牌,並通過POST發送它。

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

我做到了,現在正在工作,謝謝你幫助我,你是最好的 – 2013-05-02 14:53:17

+0

「參數」是不正確的。這是Ray的答案中的「customHeaders」。 – Joel 2014-03-03 22:08:35

2

看起來你沒有按照你所引用的指示。 Fine Uploader文檔中還描述了自定義標頭的正確使用。

完全刪除您customFields財產和修改request屬性來讀取:

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

你說得對,我已經使用customFields只測試了,我錯過在這裏提交問題之前,再次將其更改爲customHeaders,對不起。反正不能用customHeaders – 2013-05-02 14:52:42

+0

顯示你的修改代碼。另外,你做了什麼故障排除?當你檢查原始請求時,你看到了什麼?令牌是否正確?你真的解析這個頭服務器端? 「不工作」是不夠的信息。 – 2013-05-02 15:04:47

+1

現在我發送'csrfmiddlewaretoken'到request.params和文件正在上傳,問題是令牌沒有被髮送。我還需要修改'filename = request.GET ['qqfile']'中的視圖到'filename = request.FILES.get('qqfile')._ name' – 2013-05-02 15:13:58