Django,全局变量和标记

2020-12-02 19:56:29 发布

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

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

但是我想给这个过程增加一些最低限度的安全性:当我把数据传输到另一台机器时,我想加入一个随机生成的令牌。当我取回已处理的数据时,我希望也能取回相同的令牌,否则请求将被忽略。在

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

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

有没有第三种解决方案,或者使用Django实现这种功能的规范方法?在

2条回答
网友
1楼 ·

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

网友
2楼 ·

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

另一种方法是使用redis。在

您还可以计算您的代币:

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

    令牌=哈希库.sha1(秘琰令牌) 令牌.update(str(取整的时间戳)) 令牌=Hextoken摘要()

  3. 如果发布请求时在远程服务器上生成的令牌与本地服务器上生成的令牌匹配,则在获取响应时,请求是有效的,可以进行处理。在

相关问题