Django JQuery Ajax文件上传

我已经尝试上传一个简单的文本文件了几个小时,但似乎仍然无法正常工作。

我不断收到无效的表格,说我缺少“ file_source”。

为什么“ file_source”没有发布?

我还可以发送“ file_source”,但是它仍然说它丢失了。应该为Django FileFiled提供哪种类型的元素?

Django表格:

class FileUploadForm(forms.Form):

file_source = forms.FileField()

Django模板(呈报形式):

<form action="/upload/" method="post" id="file-upload-form" enctype="multipart/form-data"> {% csrf_token %}

{{ form }}

<button type="submit" class="btn btn-primary" id='upload-btn'>Upload</button>

</form>

jQuery / Ajax上传:

function uploadFile() {

$.ajax({

data: $(this).serialize(),

type: $(this).attr('method'),

url: $(this).attr('action')

});

return false;

}

$(function() {

$('#file-upload-form').submit(uploadFile);

});

收到POST的Django视图:

def upload_view(request):

if request.is_ajax():

form = FileUploadForm(request.POST)

if form.is_valid():

print 'valid form'

else:

print 'invalid form'

print form.errors

return HttpResponseRedirect('/ingest/')

回答:

这是我为了使其工作而进行的更改。

  1. 我使用FormData打包来自表单的数据
  2. 注意Django视图中表单的参数。我之前没有指定“文件”,这就是导致“文件字段必填”错误的原因。

Javascript:

function upload(event) {

event.preventDefault();

var data = new FormData($('form').get(0));

$.ajax({

url: $(this).attr('action'),

type: $(this).attr('method'),

data: data,

cache: false,

processData: false,

contentType: false,

success: function(data) {

alert('success');

}

});

return false;

}

$(function() {

$('form').submit(upload);

});

Django视图:

def upload_view(request):

if request.method == 'POST':

form = FileUploadForm(data=request.POST, files=request.FILES)

if form.is_valid():

print 'valid form'

else:

print 'invalid form'

print form.errors

return HttpResponseRedirect('/ingest/')

以上是 Django JQuery Ajax文件上传 的全部内容, 来源链接: utcz.com/qa/429225.html

回到顶部