2012-06-23 28 views
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有人幫我想出解決辦法?

回答

3
resp = self.client.post(self.client.post(...)) 

不要着急,恰巧大家:)

+0

我的天啊,多麼愚蠢的錯誤..謝謝Vasilly – damon

相關問題