首页 > 解决方案 > csrf验证失败如何解决

问题描述

我正在尝试创建将 zip 文件上传到服务器的表单。但是每次我点击提交时,我都会收到CSRF verification failed错误消息。这是我的html代码:

<form method="POST" name="form-import-file" enctype="multipart/form-data">
    <div>
        <input type="file" id="file" name="file" accept=".zip"/>
        <input type="submit" value="Upload file">
    </div>
</form>
<div class="url-csrf" data-csrf="{{ csrf_token }}"></div>
<div class="url-import-file" data-url-import-file="{% url 'intent:import_file' %}"></div>

在我的 .js 代码中:

$("form[name='form-import-file']").submit(function(e) {
    var formData = new FormData($(this)[0]);
    alert(formData);
    var json_data = {'csrfmiddlewaretoken' : $('.url-csrf').attr('data-csrf'), 'file': formData };
    $.ajax({
        url: $('.url-import-file').attr('data-url-import-file'),
        type: "POST",
        data: json_data,
        success: function (msg) {
            alert(msg)
        },
        cache: false,
        contentType: false,
        processData: false
    });
   e.preventDefault();
});

标签: ajaxdjangodjango-csrf

解决方案


一个简单的解决方案是在呈现页面的视图中使用ensure_csrf_cookie 。重要的是,装饰器必须在呈现页面的视图中,而不是在接收post请求的视图中。

from django.views.decorators.csrf import ensure_csrf_cookie

@ensure_csrf_cookie
def get_the_page(request):
    return render(request, 'template.html')


推荐阅读