我是芹菜的新手。我关注this example。
Views.py
def results(request):
documents = Document.objects.all()
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
data = form.cleaned_data['name']
print 'data', data
newdoc = Document(docfile=request.FILES['docfile'])
newdoc.save()
#send it to celery
documents = Document.objects.all()
return render_to_response(
'results.html',
{'documents' : documents}, context_instance=RequestContext(request))
用户将上传将由引擎处理的文件。在此期间,我希望结果页面显示已完成的所有作业。我想过使用celery并修改tasks.py来处理文件。完成后,该文件将显示为用户下载它的URL。
我想不出一种方法来异步轮询这个任务来实现这个部分。 谢谢。
答案 0 :(得分:8)
您可以使用Django-celery-results。它是芹菜的一个简单而好的扩展,使您能够将任务结果存储在django数据库中。 使用以下命令安装扩展程序:
SELECT concat(hour(sec_to_time(time_milis)), ' ', sec_to_time(time_milis))
FROM (
SELECT SUM(TIMEDIFF(logout_timestamp,login_timestamp)) AS time_milis FROM t_access_log WHERE logout_timestamp!='0000-00-00 00:00:00' GROUP BY login_id
)se
更新settings.py:
$ pip install -U django-celery-results
通过执行数据库迁移来创建Celery数据库表:
CELERY_RESULT_BACKEND = 'django-db'
INSTALLED_APP = (
...
...
django_celery_results
)
然后,您可以从数据库中获取已完成任务的列表,并将其显示在视图中。
$ python manage.py migrate django_celery_results
定义模板“templates / tasks.html”
from django_celery_results.models import TaskResult
def tasks_view(request):
tasks = TaskResult.objects.all()
template = "tasks.html"
return render(request, template, {'tasks': tasks})