1
我正在嘗試ajax file upload in django
。我編碼javascript ,django view
如下。文件上傳成功。然後我寫了一個測試方法的視圖。當測試執行時,文件得到成功上傳到目標文件夾。但是,我收到了一些奇怪的錯誤。在django測試ajax文件上傳時出現奇怪的錯誤
在應用程序中執行ajax上載時,不會發生此特定錯誤。只有在執行測試時纔會發生此問題。從urls.py文件
$(document).ready(function(){
$(document).on('change', '#fileselect', function(e){
e.preventDefault();
uploadFile(e);
});
function uploadFile(e){
var form = $('#fileform').get(0);
var formData = new FormData(form);
var file = $('#fileselect').get(0).files[0];
var xhr = new XMLHttpRequest();
formData.append('file', file);
xhr.open('POST', 'upload/', true);
xhr.send(formData);
xhr.onreadystatechange=function(){
if (xhr.readyState==4 && xhr.status==200){
var data = $.parseJSON(xhr.responseText);
var uploadResult = data['message']
if (uploadResult=='failure'){
displayErrorMessage('failed to upload');
}else if (uploadResult=='success'){
}
}
}
}
...
Django的視圖
def ajax_upload(request):
retvals = {}
message="failure"
if (request.method == 'POST'):
if request.FILES.has_key('file'):
file = request.FILES['file']
print 'file=',file
with open(settings.uploadfolder+'/'+fname, 'wb+') as dest:
for chunk in file.chunks():
dest.write(chunk)
message="success"
retvals['message']= message
serialized = json.dumps(retvals)
print 'serialized=',serialized
if message == "success":
print 'success'
return HttpResponse(serialized, mimetype="application/json")
else:
return HttpResponseServerError(serialized, mimetype="application/json")
片斷
urls.py
...
url(r'^upload/$', 'myapp.views.ajax_upload',name='ajax_upload'),
...
最後,這裏是測試方法
正如你所看到的,我在視圖代碼中添加了一些打印語句,它們顯示request.FILES['file']
具有正確的值(即mydoc.doc
),並且上載成功(我可以看到該文件被複制到dest文件夾) 。
現在,這裏是控制檯輸出,顯示錯誤信息
file= mydoc.doc
serialized= {"message": "success"}
success
E
======================================================================
ERROR: test_upload (myapp.tests.UploadTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/me/dev/python/django/myapp/tests.py", line 143, in test_upload_file
resp = self.client.post(self.client.post(reverse('ajax_upload'),{'file':fp}, HTTP_X_REQUESTED_WITH='XMLHttpRequest'))
File "/home/me/Django-1.4/django/test/client.py", line 449, in post
response = super(Client, self).post(path, data=data, content_type=content_type, **extra)
File "/home/me/Django-1.4/django/test/client.py", line 252, in post
parsed = urlparse(path)
File "/usr/lib/python2.6/urlparse.py", line 108, in urlparse
tuple = urlsplit(url, scheme, allow_fragments)
File "/usr/lib/python2.6/urlparse.py", line 147, in urlsplit
i = url.find(':')
AttributeError: 'HttpResponse' object has no attribute 'find'
----------------------------------------------------------------------
Ran 1 test in 0.200s
FAILED (errors=1)
我不明白爲什麼這occurs..can有人幫我想出解決辦法?
我的天啊,多麼愚蠢的錯誤..謝謝Vasilly – damon