如何使用javascript/jQuery和ajax在django服务器上上传文件
在花了几个小时之后,我需要帮助将javascript代码与django代码进行匹配 我使用的是git中的“minimal django file upload example”版本django 1.8。 在单机版中,它工作得非常好 现在我尝试从javascript上传文件,但并没有成功地使其正常工作 Javascript代码如何使用javascript/jQuery和ajax在django服务器上上传文件,javascript,jquery,ajax,django,upload,Javascript,Jquery,Ajax,Django,Upload,在花了几个小时之后,我需要帮助将javascript代码与django代码进行匹配 我使用的是git中的“minimal django file upload example”版本django 1.8。 在单机版中,它工作得非常好 现在我尝试从javascript上传文件,但并没有成功地使其正常工作 Javascript代码 function UploadBlob(zip) { var ZipFileBlob = zip.generate({type:"blob"}); var
function UploadBlob(zip)
{
var ZipFileBlob = zip.generate({type:"blob"});
var fd = new FormData();
fd.append('data', ZipFileBlob);
fd.append('fname', 'ZipOfImage.zip');
fd.append('enctype','multipart/form-
$.ajaxSetup({
type: 'POST',
url: 'http://127.0.0.1:8000/myapp/list/',
enctype: "multipart/form-data",
headers: { "X-CSRFToken": getCookie("csrftoken") }
});
$.ajax({
data: fd,
processData: false,
contentType: false
}).done(function(data) {console.log(data);});
}
Django代码
function UploadBlob(zip)
{
var ZipFileBlob = zip.generate({type:"blob"});
var fd = new FormData();
fd.append('data', ZipFileBlob);
fd.append('fname', 'ZipOfImage.zip');
fd.append('enctype','multipart/form-
$.ajaxSetup({
type: 'POST',
url: 'http://127.0.0.1:8000/myapp/list/',
enctype: "multipart/form-data",
headers: { "X-CSRFToken": getCookie("csrftoken") }
});
$.ajax({
data: fd,
processData: false,
contentType: false
}).done(function(data) {console.log(data);});
在forms.py中
class DocumentForm(forms.
docfile = forms.FileField(label='Select a file')
in views.py
def list(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile = request.FILES['docfile'])
newdoc.save()
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('myproject.myapp.views.list'))
else:
print "invalid form"
else:
form = DocumentForm() # A empty, unbound form
# Load documents for the list page
documents = Document.objects.all()
# Render list page with the documents and the form
return render_to_response(
'list.html',
{'documents': documents, 'form': form},
context_instance=RequestContext(request)
)
代码运行到request.method==“POST”。之后,我不知道是否应该将字段添加到ajax请求中(以及哪些请求),或者django中是否有更合适的表单,或者执行其他操作
请帮忙 你有错误吗?你在读我的想法,它们在这里。1) form.is\u valid始终为false。2) 当我删除form.is_上的条件时,我得到http错误500。这意味着说明中有错误:newdoc=Document(docfile=request.FILES['docfile'])您的500应该抛出特定的django堆栈跟踪错误,对吗?很难理解问题出在哪里,我创建了一个HTML5文件上传程序,很难满足CSRF令牌的要求。最后我不得不写很多代码来让它工作,可能不是最好的例子,但它确实工作了。谢谢,我来看看git。我应该怎么做才能看到django堆栈跟踪错误。在控制台上,我只看到了500Chris,我查看了您的代码,并将newdoc=Document(docfile=request.FILES['docfile'])更改为newdoc=Document(request.POST,request.FILES),就像在您的文件中一样。现在我又做了一步。错误发生在newdoc.save()。谢谢你的这一步。仍然错误500