【发布时间】:2019-06-27 05:02:17
【问题描述】:
我在 Django 中开发了一个应用程序,用户在该应用程序中访问网站上的表单并输入 Elasticsearch 查询,然后生成报告供用户下载。这一切都很好而且花花公子,但最近在测试更多查询时,我们注意到有些返回很多结果导致超时请求。
我们发现我们想做的是让 Django 不断检查文件是否存在(因为在完成之前它不会被写入本地系统)以防止出现超时问题。此外,一旦文件创建完成,我们希望添加一个下载按钮,以便用户知道它已完成。
按照this 教程,我在views.py 中添加了一个函数,并将它与一个url 相关联,然后由我的html 表单中的javascript 代码块调用。因为我是使用 AJAX、JQuery、Javascript 和 Django 的新手,所以我不太确定如何让它工作。主要是,我试图弄清楚如何让它继续检查文件是否已经创建完成。如果这只是使用基本的 Python,我会做一个 while 循环,但我不清楚如何将其转换为 JavaScript。
views.py
def check_progress(request):
"""
Returns whether document generation is complete or in progress
Returns 0 for in-progress, 1 for complete (either due to completion, or error)
"""
# check if file exists, return response as a JSON
file = "/report.docx"
data = {
"file_created": path.exists(file)
}
return JsonResponse(data)
urls.py
from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('', views.get_query, name='form'),
path('^ajax/check_progress/$', views.check_progress, name='check_progress')
] + static(settings.STATIC_URL, document_root=settings.STAT)
form.html
{% block javascript %}
<script>
$("#id_username").change(function () {
var username = $(this).val();
$.ajax({
url: '/ajax/check_progress/',
type: 'HEAD',
data: {
'file_exists': 'True'
},
dataType: 'json',
success: function (data) {
if (data.exists) {
alert("This file is not yet created");
}
}
});
});
</script>
{% endblock %}
【问题讨论】:
标签: javascript python jquery django ajax