我有一个Django应用程序来记录自动完成界面中的字符序列。每次调用服务器时,参数都会添加到列表中,当用户提交查询时,列表将写入文件。
由于我不确定如何在后续调用之间保留列表,因此我依赖于全局变量query_logger
。现在我可以通过以下方式保留列表:
def log_query(query, completions, submitted=False):
global query_logger
if query_logger is None:
query_logger = list()
query_logger.append(query, completions, submitted)
if submitted:
query_logger = None
虽然这个hack适用于发送请求的单个客户端,但当来自多个客户端的请求时,我认为这不是一个稳定的解决方案。我的问题有两方面:
答案 0 :(得分:1)
如果您的django服务器是单线程的,那么是的,它将在收到请求时响应请求。如果您使用的是wsgi或其他代理,则会变得更加复杂。无论如何,我想你会想用db来存储信息。
我遇到了类似的问题,并最终使用sqlite临时存储数据,因为这非常简单且易于管理。您将需要使用IP地址或创建作为url参数传递的唯一ID,以便在后续请求中识别客户端。
我还安排了一个日常任务(在ubuntu上使用cron),该任务通过并删除任何尚未完成的未完成请求(不包括那些在过去一小时内开始的请求)。
答案 1 :(得分:1)
您不能为此使用全局变量。
正确的答案是使用session - 这正是它的用途。
答案 2 :(得分:-1)
最简单(不好)的解决方案是拥有一个全局变量。这意味着您需要一些内存位置或数据库来存储此信息