将进度返回到Django中每个值更改的模板

将进度返回到Django中每个值更改的模板,django,ajax,python-3.x,django-templates,Django,Ajax,Python 3.x,Django Templates,我想在后端显示任务的进度,以便让用户知道工作仍在进行中 我对函数进行了ajax调用,以获得最终值。在后端,完成作业需要很多时间,但是每次我在一个变量中有作业进度时,我都希望在前端显示该变量的值 例如,我的ajax函数是 def ajax_call(request): j = 0 for i in range(1,10000): j += i res = {'data': j} return JsonResponse(res, safe=False)

我想在后端显示任务的进度,以便让用户知道工作仍在进行中

我对函数进行了ajax调用,以获得最终值。在后端,完成作业需要很多时间,但是每次我在一个变量中有作业进度时,我都希望在前端显示该变量的值

例如,我的ajax函数是

def ajax_call(request):
    j = 0
    for i in range(1,10000):
        j += i
    res = {'data': j}
    return JsonResponse(res, safe=False)

正如我们所知,它将返回j的最终值。但是我想在每一个变化中显示前端j的值。有没有简单的方法可以使用芹菜或其他东西来实现这一点?如果不结束请求,就无法显示j的每个值,因此,结束过程本身

但是,您可以做一些变通方法,比如在某个模型中有一个状态字段,从中获取该值并将其传递给您的用户,这应该适用于芹菜任务或其他任务

一些简单的代码没有经过测试

在你的模型中.py

类TaskStatusmodels。模型: 状态_ONEPERCENT='zeropct' 状态_ONEPERCENT='onepct' 状态_TENPERCENT='tenpct' 选项\u状态= 状态0%,0%, 状态为百分之一,“'1%”, 状态为百分之十,百分之十, user=models.ForeignKey 获取用户模型, 详细\u名称=\u用户任务所有者', 相关的\u name='tasks\u状态' task_uuid=models.CharFieldverbose_name='Taks unique ID',maxlength=50 status=models.CharField 详细名称=u任务状态', 选择=选择与状态, 默认值=选项\状态[0][0] 在你看来

def create_任务状态请求: newts=TaskStatus.objects.create user=request.user, 任务_uuid=uuid.uuid1 res={ “tsuid”:newts.task_uuid, “状态”:newts.status, “status\u hr”:newts.get\u status\u显示人类可读的状态 } 返回JsonReponseres,safe=False def get_任务状态请求,tsuid: user\u task=get\u user\u model.tasks\u status.gettask\u uuid=tsuid res={ “tsuid”:用户\u task.task\u uuid, “状态”:用户_task.status, “状态\u hr”:用户\u任务。获取\u状态\u显示人类可读的状态 } 返回JsonReponseres,safe=False 您的流程将是,进行ajax调用以创建任务状态,并使用返回的tsuuid查询该任务的状态进行定期调用以获取任务状态视图。在此处要小心,如果调用太频繁,可能会导致服务器过载

当前任务代码必须接收任务uuid,并负责更新TaskStatus.status值,以便根据需要进行更新:

def ajax_callrequest,taskuuid: user\u task=get\u user\u model.tasks\u status.gettask\u uuid=tsuid j=0 对于范围为110000的i: j+=i 如果j==100: 用户_task.status=TaskStatus.status_百分比 用户_task.save elif j==1000: 用户_task.status=TaskStatus.status_百分之十 用户_task.save res={'data':j} 返回JsonResponseres,safe=False 这只是一种方法,您必须调整代码以满足您的需要,我只是希望这能推动您找到解决方案

另一方面,您可以利用WebSocket并使用或将更新推送到用户套接字连接中的某个通道,但如果您只是需要此功能,我不会尝试,这里的开销很大