2017-09-19 12 views
0

djangoを使用していて、特定の場所に保存されているzipファイルをアップロードしたいアプリケーションを作成しました(この時点で私のdjangoサーバーはlocalhostです) Djangoでフォームを送信した後にリダイレクトするページを停止する

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

私はシングルページアプリケーションを構築しようとしています。このリダイレクトは、Webページの状態全体をウィンドウから投げ捨てています。

djangoフォームを使用する代わりにAJAX呼び出しを行う方法はありますか?

ありがとうございます!

EDIT

私は、アップロードされたファイルを取得し、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

あなたは、AJAXを使用する必要がありますこれは、フォームからデータを取得し、要求を行い、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

関連する問題