Javascript 尝试使用ajax上载文件时,CSRF保护总是失败

Javascript 尝试使用ajax上载文件时,CSRF保护总是失败,javascript,jquery,django,django-csrf,jqxhr,Javascript,Jquery,Django,Django Csrf,Jqxhr,几天前我才知道。所以我尝试构建一个应用程序,当用户填写表单的其他部分时,可以上传所选文件 我的应用程序有两种型号: class Post(models.Model): image = models.ImageField(...) title = ... desc = ... class TempImg(models.Model): image = models.ImageField(...) posted_by = ... posted_at =

几天前我才知道。所以我尝试构建一个应用程序,当用户填写表单的其他部分时,可以上传所选文件

我的应用程序有两种型号:

class Post(models.Model):
    image = models.ImageField(...)
    title = ...
    desc = ...

class TempImg(models.Model):
    image = models.ImageField(...)
    posted_by = ...
    posted_at = ...
用于制作帖子的表单,在这里您可以看到temp_图像作为隐藏输入:

class PostForm(forms.ModelForm):
    temp_image = forms.IntegerField(widget=forms.HiddenInput)
    class Meta:
        model = Post
当用户选择图像时,此javascript代码上载图像并将返回的id值放入表单的temp_图像字段:

// here is a function that gets csrftoken, [which is taken from docs
// https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

csrftoken = ...

form = new FormData();
form.append("image", dataURLToBlob(resizedImgData));
form.append("csrftoken", csrftoken)

$.ajax({
    url: '/upload/',
    data: form,
    processData: false,
    contentType: false,
    dataType: 'json',
    type: 'POST',
    beforeSend: function() {
        $("#uploadingIndicator").show()
    },
    success: function(data){
        $("#id_temp_image").val(data['id'])
        $("#uploadingIndicator").hide();
    }
});
在我看来一切都很好,但有一个问题,我的视图总是返回403。CSRF验证错误

有谁知道我应该去哪里看吗?如果我找不到解决方案,我将使用csrf\U exemt…

您应该使用

form.append("csrfmiddlewaretoken", csrftoken)
当您尝试执行
form.append(“csrftoken”,csrftoken)

时,是否可能重复?