gpt4 book ai didi

django - 使用 Django 重定向和传递 Celery 任务数据

转载 作者:行者123 更新时间:2023-12-02 06:20:34 24 4
gpt4 key购买 nike

我想用django-celery构建一个网络服务器:

  1. 在页面/input/上接受用户的数据
  2. 启动 Celery 任务来处理它们
  3. 重定向到页面 /wait/,用户在此等待处理完成
  4. 任务完成后,自动重定向到页面/result/

目前我被代码困住了(简化):

views.py:

def input(request):
# Read form data to 'parameters'
task = process_user_input.delay(parameters)
response = HttpResponseRedirect("/wait")
response.session['task'] = task
return response

def wait(request):
task = request.session.get('task', None)
while task.state not in ('SUCCESS', 'FAILURE'):
time.sleep(0.1)
return HttpResponseRedirect("/result")

def result(request):
#

urls.py:

urlpatterns = patterns('',
url(r'^input/$', views.input, name = 'input'),
url(r'^wait/$', views.wait, name = 'wait'),
url(r'^result/$', views.result, name = 'result'),
)

但是,这不起作用,因为“HttpResponseRedirect”对象没有属性“session”。我也尝试使用render函数,但它只加载相应的模板,而没有调用 View 函数。

有人可以帮助我修复代码以实现我的目标吗?

最佳答案

经过一些研究,我得出结论,我得出的结论是 django 没有提供所需的功能,因为无法异步渲染页面(因此,无法在以下位置渲染和重定向)同一时间)。因此,我决定摆脱 /wait/ 页面。我的 views.py 现在看起来像这样:

from my_app.forms import InputForm
from mysite.tasks import process_user_input

def input(request):
form = InputForm()
# Read form data to 'parameters'
task = process_user_input.delay(parameters)
while task.state not in ('SUCCESS', 'FAILURE'):
time.sleep(0.1)
if task.failed():
# Insert error message and return to the input form
render(request, 'my_app/input.html', {'form': form})
return HttpResponseRedirect("/result")

def result(request):
#

我必须在 input.html 中使用 JavascriptjQuery 来实现等待消息:

<div id="form_container">
<!--The form (with id="input_form") is here-->
</div>
<div id="hidden_section" style="display: none;">
<!--The please-wait-message is here-->
</div>

<script>
$(document).ready(function () {
$("#input_form").submit(function () {
$("#form_container").attr("style", "display: none");
$("#hidden_section").attr("style", "display: block");
return true;
});
});
</script>

因此,提交表单后,用户仍保留在 /input/ 页面上,但会看到请等待消息,直到任务完成或发生错误为止。

关于django - 使用 Django 重定向和传递 Celery 任务数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37792953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com