1
几天之后,我才知道we can make file uploads with ajax。所以我试图建立一个应用程序,当用户填写表单的其他部分时,上传选定的文件。尝试使用ajax上传文件时,CSRF保护始终失败
我的应用程序有两种型号:
class Post(models.Model):
image = models.ImageField(...)
title = ...
desc = ...
class TempImg(models.Model):
image = models.ImageField(...)
posted_by = ...
posted_at = ...
用来制作邮报的形式,在这里你可以看到temp_image作为隐藏输入:
class PostForm(forms.ModelForm):
temp_image = forms.IntegerField(widget=forms.HiddenInput)
class Meta:
model = Post
当用户选择图像,这段JavaScript代码上传它并把返回的id值的形式的temp_image字段:
// 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_exemt如果我不能找到解决办法...
http://stackoverflow.com/的可能的复制questions/10562494/csrf-with-ajax-and-django-post?rq = 1? – 2013-04-22 19:35:13