Django,全局变量和标记

时间:2016-01-21 14:04:20

标签: python django asynchronous global-variables

我使用django开发网站。在服务器端,我需要传输一些必须在第二台服务器上处理的数据(在另一台机器上)。然后我需要一种方法来检索处理过的数据。我认为最简单的方法是将一个POST请求发送回Django服务器,然后在专用于该作业的视图上处理。

但我想为此过程添加一些最低安全性:当我将数据传输到另一台机器时,我想加入一个随机生成的令牌。当我收到处理过的数据时,我希望也会返回相同的令牌,否则请求将被忽略。

我的问题如下:如何将生成的令牌存储在Django服务器上?

  • 我可以使用一个全局变量,但我在网络上有这样的印象,不应该出于安全原因使用全局变量(不是我理解为什么真的)。
  • 我可以将令牌存储在磁盘/数据库上,但这似乎是对性能的不合理浪费(即使在实践中它可能不会有太大变化)。

是否有第三种解决方案,或使用Django进行此类操作的规范方法?

2 个答案:

答案 0 :(得分:1)

您可以将令牌存储在django缓存中,在大多数情况下,它可以更快地从数据库或磁盘存储。

另一种方法是使用redis。

您还可以计算您的令牌:

  1. 在两台服务器的设置中保存一些随机令牌
  2. 根据当前时间戳舍入为10秒计算令牌,例如使用:

    token = hashlib.sha1(secret_token) token.update(STR(rounded_timestamp)) token = token.hexdigest()

  3. 如果在本地服务器上生成POST请求匹配令牌时在远程服务器上生成令牌,则在获取响应时,请求有效且可以处理。

答案 1 :(得分:1)

简单明显的解决方案是将令牌存储在数据库中。其他可能的解决方案是Redis或类似的东西。最后,您可以查看分布式异步任务队列,如Celery ...