Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript/jQuery和ajax在django服务器上上传文件_Javascript_Jquery_Ajax_Django_Upload - Fatal编程技术网

如何使用javascript/jQuery和ajax在django服务器上上传文件

如何使用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

在花了几个小时之后,我需要帮助将javascript代码与django代码进行匹配

我使用的是git中的“minimal django file upload example”版本django 1.8。 在单机版中,它工作得非常好

现在我尝试从javascript上传文件,但并没有成功地使其正常工作

Javascript代码

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