Я относительно новичок в Django и еще новее в JavaScript, так что извините за мой вопрос.Ситуация такая:
1) У меня есть сайт для загрузки файлов, закодированный в Django, с некоторой логикой, подобной приведенной ниже:
def page_query(request):
...
if request.method == 'POST':
...
file_entry = file_form(request.POST, request.FILES)
if file_entry.is_valid():
if request.FILES.get('filename', False) != False:
f = request.FILES['filename']
fname = time_id + '_' + case_id + '_.ext'
file_check = data_admin.upload_file(f, fname, upload_path)
upload_file_path = os.path.join(upload_path, fname)
data_admin.upload_file () - это пользовательская функция, определенная в другом модуле моего проекта с функцией, сводящейся к следующему:
with open(upload_path + fname, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
2) Я хотел добавить своего рода индикатор прогресса загрузки на свой веб-сайт, и во многих источниках явидели людей, рекомендующих решение jQuery Ajax, которое сводится к следующему коду:
$(document).ready(function() {
$('#form_id').on('submit', function(event) {
// event.preventDefault();
var post_data = new FormData($("#form_id")[0]);
$.ajax({
xhr: function() {
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener("progress", function(evt) {
var percent = Math.round(evt.loaded/evt.total * 100)
console.log(percent)
$('#complaint_query_button').attr('disabled', true)
$('#complaint_query_button').get(0).innerText = "Upload status: " + percent + '%'
}, false);
xhr.upload.addEventListener("load", function(evt) {
$('#complaint_query_button').css('background-color', 'green').delay(2000)
$('#complaint_query_button').get(0).innerText = "COMPLETE, refreshing..."
// setTimeout(location.reload.bind(location), 10000);
}, false);
return xhr;
},
url: window.location.href,// to allow add and edit
// url: window.location.reload(),
type: "POST",
data: post_data,
processData: false,
contentType: false,
success: function(result) {
//
}
});
})
Приведенное выше решение сработало для меня как чудо, и у меня есть кнопка отправки, которая показывает прогресс загрузки в% s, однакоЯ думаю, я не совсем понимаю, что именно происходит со всем этим на месте. Я видел файлы, вложенные в файл ввода. Элементы HTML дважды загружаются в мое место назначения на сервере. Кроме того, процесс загрузки, указанный на кнопке отправки командой Ajax, не совпадает с информацией о ходе загрузки моего браузера.отображается в нижней левой части страницы.Я действительно смущен вышесказанным - я создаю 2 потока загрузки (один с Django, другой с Ajax)?Как я могу их примирить?Я открыт для предложений о том, как решить эту проблему, или, может быть, есть нативный модуль Django, который заботится о ходе загрузки файла?
Спасибо.
ОБНОВЛЕНИЕ 19 сентября 2018 Все еще не повезло, выяснив это.Буду признателен любому, кто найдет момент, чтобы поделиться своим мнением со мной.Извиняюсь за бесстыдное столкновение.