Python 在Django中提交表单后停止页面重定向
我正在使用django,我创建了一个应用程序,我想在其中上载一个保存在特定位置的zip文件(此时,我的django服务器是localhost) 我有以下工作正常的代码: 这是我的HTML模板:Python 在Django中提交表单后停止页面重定向,python,ajax,django,python-2.7,django-forms,Python,Ajax,Django,Python 2.7,Django Forms,我正在使用django,我创建了一个应用程序,我想在其中上载一个保存在特定位置的zip文件(此时,我的django服务器是localhost) 我有以下工作正常的代码: 这是我的HTML模板: <form id="saveZipFile" enctype="multipart/form-data" action="" method="post"> {% csrf_token %} <input type="file" name="docfile" id="doc
<form id="saveZipFile" enctype="multipart/form-data" action="" method="post">
{% csrf_token %}
<input type="file" name="docfile" id="docfile">
<input type="submit" id="upload-button" value="Upload">
</form>
这是my views.py:
def handle_uploaded_file(f):
with open('uploaded_zip.zip', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['docfile'])
return HttpResponse()
else:
form = UploadFileForm()
return HttpResponse()
URL.py:
urlpatterns = [
url(r'^upload_file/$', views.upload_file, name='upload_file'),
]
但最终,url变为/upload\u file
——据我所知,这是正确的——并且该页面是空的(因为我返回的是空的HttpResponse
)
我正在尝试构建一个单页应用程序,而这个重定向将我的网页的整个状态抛出了窗口
有没有什么方法可以代替django表单进行AJAX调用
谢谢
编辑
我确实添加了一个ajax调用,用于获取上传的文件并将其发送到django视图
AJAX调用:
var selectedFile = $('#docfile').files[0];
var fd = new FormData();
fd.append("file", selectedFile);
$.ajax({method: 'POST',
url: 'upload_file',
data: fd,
headers: {'Content-Type': undefined,
'X-CSRFToken': getCookie('csrftoken')
},
cache: false,
processData: false})
.done(function(data) {
alert(data)
});
但是在我打印出request.POST
的视图中,我得到了这样的混乱(以及很多很多行):
为此,您应该使用ajax,从表单中检索数据,发出请求并返回false,这样可以防止发生重定向。应该是这样的:
$(function() {
$('form').submit(function() {
$.ajax({
type: 'POST',
url: 'form-submit.php',
data: { name: $(this).name.value,
surname: $(this).surname.value }
});
return false;
});
})
嗯,是的。但是我也必须保存zip文件的内容,对吗?当我发送zip文件内容时,我得到的查询信息中充满了二进制数据,我不知道该怎么办。我做了一些调查,当我们使用django表单上传文件时,上传的文件变成了InMemoryUploadedFile对象,因此调用内置django函数保存此文件非常简单。当request.POST QueryDict中有大量数据,并且似乎没有一种简单的方法将其转换为.zip文件时,问题就会出现
<QueryDict: {u'\x00\x00userapp/.git/objects/0e/34e20fc7131238973f102fe6d2d7fe102d12f4UT\x05\x00\x03\ufffd': [u'\xc0Yux\x0b\x00\x01\x04\xe8\x03\x00\x00\x04\xe8\x03\x00\x00PK\x01\x02\x1e\x03\n\x00\x00\x00\x00\x001\x852K\x00\x00\x00\x00\x00\x00\
$(function() {
$('form').submit(function() {
$.ajax({
type: 'POST',
url: 'form-submit.php',
data: { name: $(this).name.value,
surname: $(this).surname.value }
});
return false;
});
})