Django 函数结束前更新request.session变量
在Django服务器上,我有一个页面,其中有一个启动函数的按钮。 此函数需要一段时间才能完成,我尝试将进程更新写入request.session变量,目的是从单独的页面检查其内容。 但是,在完成包含request.session变量的函数之前,它们似乎不会更新。至少变量在此之前不会更新。 我说的对吗?如果是,是否有办法在函数完成之前写入request.session变量 会话设置正确,我可以使用其他示例编写和读取变量。现在,我还将创建一个临时数据库记录来存储状态更新信息并从那里读取,但对于这个请求,我很好奇。会话问题-我的猜测正确吗,有办法吗 更新: views.pyDjango 函数结束前更新request.session变量,django,session-variables,Django,Session Variables,在Django服务器上,我有一个页面,其中有一个启动函数的按钮。 此函数需要一段时间才能完成,我尝试将进程更新写入request.session变量,目的是从单独的页面检查其内容。 但是,在完成包含request.session变量的函数之前,它们似乎不会更新。至少变量在此之前不会更新。 我说的对吗?如果是,是否有办法在函数完成之前写入request.session变量 会话设置正确,我可以使用其他示例编写和读取变量。现在,我还将创建一个临时数据库记录来存储状态更新信息并从那里读取,但对于这个请
@login_required
def autolink(request):
result, time = access_check(request, 'super')
if not result:
return redirect('index')
result = f_autolink(request)
if result is None:
result = request.session.get('technical', '')
return render(request, 'autolink.html', {'result': result, })
函数.py
def f_autolink(request):
if request.method == 'GET':
result = None
elif request.method == 'POST':
request.session['technical'] = 'starting the job'
result = f_kzd_autolink(request)
else:
result = None
return result
def f_kzd_autolink(request):
homeless = Kzd.objects.filter(payment__isnull=True, returned=False).distinct()
result = []
count = homeless.count()
counter = 0
request.session['technical'] = 'Starting link job - {c} records to process'.format(c=count)
for h in homeless:
counter += 1
request.session['technical'] = 'Checking record {c1} of {c}'.format(c1=counter, c=count)
/* long code that makes the h in homeless cycle run for about 3 minutes, unrelated to the question */
因此,基本上,视图显示request.session.get('technical',''),但在它们完成之前,两个函数都不会写入它(然后它会写入关于处理最后一条记录的内容).当会话被保存或设置为
settings时,会按每个请求保存会话。会话\u SAVE\u每个请求
在您的设置中设置为True
因此,简单的答案是肯定的,在处理视图创建的响应时,会话由会话中间件保存。但您可以通过在视图中调用request.session.save()
手动完成此操作
如果您有运行时间很长的代码,那么最好立即创建响应并使用异步处理任务之类的工具
您应该考虑将数据存储到自己的数据库表/自己的模型中,如果它与用户会话没有真正的关联。
< P>会话是在每次请求的基础上保存的,或者是在设置<代码>设置时。SESSIONSaveSeEvIX请求< /代码>在您的设置中被设置为<代码>真< /COD>。p> 因此,简单的答案是肯定的,在处理视图创建的响应时,会话由会话中间件保存。但您可以通过在视图中调用request.session.save()
手动完成此操作
如果您有运行时间很长的代码,那么最好立即创建响应并使用异步处理任务之类的工具
你应该考虑将数据存储到自己的数据库表/自己的模型中,如果它与用户会话没有真正的联系。
你应该在你的问题中包含A。发布您的观点和您已经尝试过的内容。那么提供答案就容易多了。@trixn抱歉,添加了信息。如果你有很长的计算要运行,你真的想使用一些异步任务系统(如芹菜、rq等)在带外运行它们。你应该在问题中包含一个。发布您的观点和您已经尝试过的内容。那么提供答案就容易多了。@trixn抱歉,添加了信息。如果你有长时间的计算要运行,你真的想使用一些异步任务系统(如芹菜、rq等)在带外运行它们。太好了,这很有效。非常感谢,我自己无法从文档中看出这一点!至于芹菜和db,是的,我同意。这真的只是一个快速修复,我需要一个单独的任务,所以我只是想快速更新。芹菜肯定会更好,但我还没学会用它。教程放在书签栏里,所以我希望我很快就会看到。太好了,这很有效。非常感谢,我自己无法从文档中看出这一点!至于芹菜和db,是的,我同意。这真的只是一个快速修复,我需要一个单独的任务,所以我只是想快速更新。芹菜肯定会更好,但我还没学会用它。教程放在书签栏里,所以我希望我很快就会看到。