ajax - 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();
});
解决方案
一个简单的解决方案是在呈现页面的视图中使用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')
推荐阅读
- visual-studio - 如何自动发布 .NET Web 应用程序
- redis - 了解您为什么要在未来处理消息队列
- dialogflow-es - DialogFlow 的 Webhook 和 javascript,我在哪里可以找到文档?
- django - 将文件从 Docker 容器上传到 Google Cloud Storage
- colors - 如何使用 Applescript(或命令行)获取加载的显示器颜色配置文件?
- c - C中函数声明中的编译错误
- python - 使用函数将 hbar 散景图嵌入到烧瓶应用程序中
- angularjs - AngularJS 1.7.9:如何调试“可能未处理的拒绝:{}”?
- javascript - 重定向时将数据传递到我的 ejs 视图
- import - Rust 从另一个文件导入结构