2017-09-19 1 views
0

django를 사용하고 있으며 특정 위치에 저장되어있는 zip 파일을 업로드하려는 응용 프로그램을 만들었습니다 (이 시점에서 내 django 서버는 localhost 임) Idjango에서 양식 제출 후 리디렉션하는 페이지가 중지됩니다.

class UploadFileForm(forms.Form): 
    docfile = forms.FileField() 

이것은이다 : 이것은 내 forms.py이

<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> 

입니다 :

이 내 HTML 템플릿입니다 : 잘 작동 다음 코드가 내 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() 

urls.py :

urlpatterns = [ 
    url(r'^upload_file/$', views.upload_file, name='upload_file'), 
] 

그러나 결국

이 URL이 /upload_file에 변화 - 나는 이해 정확한지 - 그 페이지가 비어 (I 이후 빈을 반환 함 HttpResponse)

단일 페이지 응용 프로그램을 작성하려고하는데이 리다이렉션은 내 웹 페이지의 전체 상태를 창 밖으로 던지고 있습니다.

장고 (Django) 양식 대신 AJAX 호출을 만들 수있는 방법이 있습니까?

감사합니다.

편집

나는 업로드 된 파일을 가져 와서 장고보기로 전송 아약스 호출을 추가했다.

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 인쇄보기에,이 혼란을 얻을 (그리고 많은, 많은 선) :

<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\ 

답변

0

당신이 아약스를 사용한다 이렇게하면 양식에서 데이터를 검색하고 요청을 만들고 false를 반환하여 리디렉션이 발생하지 않도록합니다. 다음과 같이보아야합니다.

$(function() { 
    $('form').submit(function() { 
     $.ajax({ 
      type: 'POST', 
      url: 'form-submit.php', 
      data: { name: $(this).name.value, 
        surname: $(this).surname.value } 
     }); 
     return false; 
    }); 
}) 
+0

음, 그렇습니다. 하지만 zip 파일 내용도 저장해야합니다. zip 파일 내용을 보내면 QueryDict에 바이너리 데이터가 가득 찼습니다. 그 중 무엇을해야할지 모르겠습니다. – SaniKul

+0

나는 약간을 연구했고 django-forms를 사용하여 파일을 업로드 할 때 - 업로드 된 파일은 InMemoryUploadedFile 객체가됩니다. 따라서 내장 된 django 함수를 호출하여이 파일을 저장하는 것은 매우 간단합니다. 질문은 요청에 거대한 데이터가있을 때 발생합니다 .POST QueryDict 및이를 .zip 파일로 변환하는 간단한 방법이 아닌 것 같습니다. – SaniKul

관련 문제