Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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
Python 在django中使用ajax调用上载文件_Python_Ajax_Django_Upload - Fatal编程技术网

Python 在django中使用ajax调用上载文件

Python 在django中使用ajax调用上载文件,python,ajax,django,upload,Python,Ajax,Django,Upload,我在django中创建了表单上传文件。它正在工作。但当我尝试在django中使用ajax时,文件上传不起作用 我的代码: models.py class Upload(models.Model): documents = models.FileField(upload_to=content_file_name) user = models.ForeignKey(User) class Meta: app_label = 'documentapp' forms.py: fr

我在django中创建了表单上传文件。它正在工作。但当我尝试在django中使用ajax时,文件上传不起作用

我的代码:

models.py

class Upload(models.Model):
   documents = models.FileField(upload_to=content_file_name)
   user = models.ForeignKey(User)

class Meta:
    app_label = 'documentapp'
forms.py:

from django import forms
class UploadForm(forms.Form):
    documents = forms.FileField()
html:

view.py

def upload(request):
context = RequestContext(request)
if request.method == 'POST':
    form = UploadForm(request.POST, request.FILES)
    if form.is_valid():
        handle_uploaded_file(request.FILES['file'])
    return HttpResponse('true')
else:
    return HttpResponse('GET')
手柄向上倾斜

def handle_uploaded_file(f):
with open('some/file/name.txt', 'wb+') as destination:
    for chunk in f.chunks():
        destination.write(chunk)

似乎您没有发送csrf_令牌。通过使用decorator,您可以在查看时跳过它(这并不推荐)

否则,您应该将{%csrf_token%}标记添加到模板中。它将使用CSRF令牌创建隐藏字段。如何在AJAX中处理它,您可以在中找到

另外,我很好奇为什么不从变量中呈现表单,而是手动添加HTML——但它与主题没有直接关系

所以我想这样做: html:

{%csrf\u令牌%}
{{form}}

另外,请参阅@Ben Rowland answer的通知,HTML/JS有几个问题

  • HTML的第一行对
    required
    属性的值有一个双终止引号

  • UploadUserDocuments()函数执行以下操作:

    $('education_documents').val() $('education_documents').val() 它试图匹配一个元素,例如
    ,而不是通过其id(即使用#选择器)选择元素值的常规方法


然而,使用JQuery执行文件上传更为复杂。这个答案有一些想法:

为什么不用forms.ModelForm代替forms.Form?{%csrf_token%}谢谢您的回复。我做了csrf代币。我对Form.py表示怀疑,因为我不知道如何使用Form。由于“if form.is\u valid”条件为false,请尝试在模板中打印表单错误(form.errors)并说出它对您所说的内容,或者在Python中的is\u valid()语句之后打印它(如果您使用它,请使用调试器查看)。这是日志中的“print form”==================================教育文档:
  • 此字段是必填字段。
def handle_uploaded_file(f):
with open('some/file/name.txt', 'wb+') as destination:
    for chunk in f.chunks():
        destination.write(chunk)
<form id="upload_doc" action="/signup/upload/" method="post" enctype="multipart/form-data"> {% csrf_token %} 
   {{form}}
   <input type="submit" value="send">
</form>
$('education_documents').val()