我正在项目中实现django-ajax-uploader,但是我想使用目前3.5.0以下的最新版本的fineuploader,据说文档说我发送csrf_token的唯一办法就是把它放在里面customHeaders字典:
如果你想使用最新版本的Fine Uploader,现在调用valum的文件上传器,而不是与django-ajax-uploader捆绑在一起,你可以通过用上面模板中的params参数替换以下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.
答案 0 :(得分:4)
使用request.params设置令牌并通过POST发送。
...
request: {
endpoint: '{% url 'documents:qq_file_uploader' %}',
params: {
'csrfmiddlewaretoken': '{{ csrf_token }}'
}
},
...
答案 1 :(得分:2)
看起来你没有按照你引用的指示行事。 Fine Uploader文档中还描述了自定义标头的正确使用。
完全删除您的customFields
媒体资源,并将您的request
媒体资源修改为:
request: {
endpoint: '{% url 'documents:qq_file_uploader' %}'
customHeaders: {
X-CSRFToken': '{{ csrf_token }}'
}
}