pythondjang中后续请求间变量的保值

2024-06-16 10:52:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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

虽然这种黑客技术适用于发送请求的单个客户端,但我认为当请求来自多个客户端时,这不是一个稳定的解决方案。我的问题有两个:

  1. 请求的执行顺序是什么:它们是否遵循先到先服务(特别是在请求是异步的情况下)?你知道吗
  2. 做这件事的更好方法是什么?你知道吗

Tags: djangonone应用程序客户端列表参数if记录
3条回答

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

  1. 如果您的django服务器是单线程的,那么是的,它将在接收请求时响应请求。如果您使用的是wsgi或其他代理,那么这将变得更加复杂。不管怎样,我认为您应该使用数据库来存储信息。

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

我还安排了一个每日任务(在ubuntu上使用cron)来完成并删除所有未完成的请求(不包括在最后一个小时内启动的请求)。你知道吗

不能为此使用全局变量。你知道吗

正确的答案是使用session——这正是它的用途。你知道吗

相关问题 更多 >