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\
いいえ、はい。しかし、zipファイルの内容も保存する必要があります。 zipファイルの内容を送信すると、QueryDictにバイナリデータがいっぱい表示されます。そのために何をすべきかわかりません。 – SaniKul
ちょっと調べて、ファイルをアップロードするときにdjango-formsを使用すると、アップロードされたファイルはInMemoryUploadedFileオブジェクトになります。そのため、内蔵のdjango関数を呼び出してこのファイルを保存するのは簡単です。問題は、リクエストに膨大なデータがある場合に発生します.POST QueryDictは、それを.zipファイルに変換する簡単な方法ではないようです – SaniKul