我创建了一个自定义命令,它接受一个位置参数和一个命名的可选参数。它执行许多检查,下载一个文件,解压缩它,并用解压缩的数据填充数据库。在
为了方便用户使用,我创建了一个简单的表单并创建了一个视图:
from django.views.generic.edit import FormView
from django.core import management
from .forms import DownloadForm
class DownloadFormView(FormView):
template_name = 'frontend/download.html'
form_class = DownloadForm
success_url = '.'
def form_valid(self, form):
country = form.cleaned_data['country'][:3]
levels = int(form.cleaned_data['country'][-1:])
management.call_command('download_shapefile', country, levels=levels)
return super(DownloadView, self).form_valid(form)
这很好,现在我想向用户提供反馈,因为命令可能会运行一段时间。在
是否可以将命令输出重定向(或使其可用)到模板并在浏览器中显示?在
在我的命令中,我使用:
^{pr2}$输出消息而不直接用print
方法打印。在
您可以通过Ajax完成任务,只需锁定屏幕,直到服务器返回响应。但这是一种不好的做法。最好的解决办法是用芹菜(或类似的东西)。这是一个分布式任务队列。您的数据将在执行后写入数据库。在此之前,临时结果将存储在NoSQL中。在这种情况下,这被称为经纪人。之后,你可以使用上面给出的建议。你只需询问服务器答案是否准备好。如果是这样,您可以将其返回并显示给用户。因此,服务器上的负载将显著降低。在
相关问题 更多 >
编程相关推荐