在Python Django

时间:2018-06-12 05:48:32

标签: python django

我有一个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适用于发送请求的单个客户端,但当来自多个客户端的请求时,我认为这不是一个稳定的解决方案。我的问题有两方面:

  1. 执行请求的顺序是:他们是按照先到先服务(特别是如果请求是异步的)?
  2. 这样做有什么好办法?

3 个答案:

答案 0 :(得分:1)

  1. 如果您的django服务器是单线程的,那么是的,它将在收到请求时响应请求。如果您使用的是wsgi或其他代理,则会变得更加复杂。无论如何,我想你会想用db来存储信息。

  2. 我遇到了类似的问题,并最终使用sqlite临时存储数据,因为这非常简单且易于管理。您将需要使用IP地址或创建作为url参数传递的唯一ID,以便在后续请求中识别客户端。

  3. 我还安排了一个日常任务(在ubuntu上使用cron),该任务通过并删除任何尚未完成的未完成请求(不包括那些在过去一小时内开始的请求)。

答案 1 :(得分:1)

您不能为此使用全局变量。

正确的答案是使用session - 这正是它的用途。

答案 2 :(得分:-1)

最简单(不好)的解决方案是拥有一个全局变量。这意味着您需要一些内存位置或数据库来存储此信息