当前位置: 首页 > 面试题库 >

Python Django全局变量

谭学名
2023-03-14
问题内容

我正在Django中寻找一种简单但推荐的方式,将变量仅存储在内存中。当Apache重新启动或Django开发服务器重新启动时,该变量重置为0。更具体地说,我想计算在每个模型实例(数据库记录)上执行特定操作的次数,但是出于性能原因,我不这样做想要将这些计数存储在数据库中。我不在乎服务器重启后计数是否消失。但是,只要服务器启动,我就希望这些计数在Django Shell和Web界面之间保持一致,并且我希望能够返回对每个模型实例执行了多少次操作。

我不希望变量与用户或会话相关联,因为我可能想在不登录的情况下返回这些计数(并且无论任何用户登录,我都希望计数保持一致)。我在描述全局变量吗?如果是这样,如何在Django中使用一个?我注意到urls.py,settings.py和models.py之类的文件似乎在每次服务器启动时仅被解析一次(与之相反,views.py似乎在每次请求时都会被解析)。这是否意味着我应该在这些文件之一中声明变量?还是应该以某种方式将其存储在模型属性中(只要它在服务器运行期间一直存在)?这可能是一个简单的问题,但是我不确定在Django中是如何完成的。


问题答案:

你不能声明全局变量。如果设置正确,则设置(常量)可以。但是变量与无共享架构冲突,可能会造成很多麻烦。(最好是它们会不一致)

我只是将这些统计信息存储在缓存中。(好吧,实际上我会将它们存储在数据库中,但是你明确表示你相信它会对性能产生负面影响,所以…)

新方法incr()decr()方法特别适用于计数。请参阅文档以获取更多信息。



 类似资料:
  • 如果你要多于一个函数共用一个简单的变量,简单的处理方法就是把这个变量在所有函数中定义为global全局变量。在命令行做同样的事情,如果你要工作空间访问上述变量。这个全局变量的定义必须出现在变量被应用于一个函数之前。虽然不是要求,但全局变量也最好以大写字母开头,这样可以同其他变量区别出来。举个例子,做一个以falling.m命名的M-文件。 function h = falling(t) globa

  • ThinkCMF封装了前台模板开发时常用的一些变量,这些变量是全局的,你在前台模板任何时候都能直接调用: {$site_name} /站点名称 {$site_host} /站点域名 {$site_root} /安装目录 {$site_icp} /

  • swoole内置了几个全局变量供程序内使用。一般不要自行创建全局变量。 SwooleG 超全局本地内存变量,此变量在swoole_init时就初始化好了。存储了一些全局的信息。但不是共享内存的。当创建子进程后再修改其中的字段,其他进程是感知不到的 SwooleG.main_reactor,全局事件循环 SwooleG.lock,全局锁 SwooleG.memory_pool,全局共享内存池 Swo

  • 全局变量 PHP中在函数、类之外直接定义的变量可以在函数、类成员方法中通过global关键词引入使用,这些变量称为:全局变量。 这些直接在PHP中定义的变量(包括include、require文件中的)相对于函数、类方法而言它们是全局变量,但是对自身执行域zend_execute_data而言它们是普通的局部变量,自身执行时它们与普通变量的读写方式完全相同。 function test() {

  • 主要内容:局部变量,全局变量,局部变量和全局变量的综合示例在《 C语言形参和实参的区别》中提到,形参变量要等到函数被调用时才分配内存,调用结束后立即释放内存。这说明形参变量的作用域非常有限,只能在函数内部使用,离开该函数就无效了。 所谓 作用域( Scope ) ,就是变量的有效范围。 不仅对于形参变量,C语言中所有的变量都有自己的作用域。决定变量作用域的是变量的定义位置。 局部变量 定义在函数内部的变量称为 局部变量(Local Variable) ,

  • 问题内容: 此代码为何起作用: 但这给出了“分配前引用的局部变量’var’”错误: 问题答案: 因为在第一个代码中,您已经创建了一个局部变量并使用了它的值,而在第二个代码中,您正在使用局部变量,而没有对其进行定义。 因此,如果要使第二个功能正常工作,则需要声明:- 在使用该功能之前。 而在此代码中: 更新 :- 但是,按照@Tim的注释,您不应在函数内部使用变量。最好在使用变量之前先定义变量,然后

  • 问题内容: 我在这里问: node.js是否需要继承? 有人告诉我可以通过省略var将变量设置为全局范围。 这对我不起作用。 即: 不能使_在必需文件上可用。我可以设置express ,但可以在其他地方使用。 有人可以确认这应该起作用吗?谢谢。 问题答案: 您可以这样使用:

  • 这些对象在所有模块中都是可用的。 有些对象实际上不在全局作用域内,而是在模块作用域内,这个在文档中会注明。 以下列出的对象是特定于 Node.js 的。 有些内置对象是 JavaScript 语言本身的一部分,它们也可以全局访问。 Buffer 类 新增于: v0.1.103 <Function> 用于处理二进制数据。详见 buffer 章节。 __dirname 新增于: v0.1.27 <st