问题标签 [django-cache-machine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 确定属性是否是 django 中的“DeferredAttribute”
上下文
我在 Django Cache Machine 中发现了一个相当严重的错误,它在从 Django 1.4 升级到 1.7 后导致它的失效逻辑失去理智。
only()
该错误被本地化为对扩展缓存机器的模型的调用CachingMixin
。它会导致深度递归,偶尔会破坏堆栈,但否则会产生巨大flush_lists
的缓存机器用于关系中模型的双向失效ForeignKey
。
错误
该错误发生在以下几行中(https://github.com/jbalogh/django-cache-machine/blob/f827f05b195ad3fc1b0111131669471d843d631f/caching/base.py#L253-L254)。在这种情况下self
,是MyModel
一个混合了延迟和非延迟属性的实例:
缓存机器跨ForeignKey
关系进行双向失效。它通过遍历 a 中的所有字段Model
并在缓存中存储一系列指针来实现这一点,这些指针指向在相关对象失效时需要失效的对象。
在 Django ORM 中的使用only()
做了一些元编程魔法,用 Django 的DeferredAttribute
实现覆盖了未获取的属性。在正常情况下,访问favorite_color
将调用DeferredAttribute.__get__
(https://github.com/django/django/blob/18f3e79b13947de0bda7c985916d5a04e28936dc/django/db/models/query_utils.py#L121-L146)并从结果缓存或数据源。它通过获取相关Model
问题的未延迟表示并在其上调用另一个only()
查询来做到这一点。
这是在循环中的外键Model
并访问它们的值时出现的问题,缓存机器引入了无意的递归。getattr(self, f.attname)
在延迟的属性上会导致获取Model
具有已CachingMixin
应用且具有延迟属性的 a。这将重新开始整个缓存过程。
问题
我想打开一个 PR 来解决这个问题,我相信这个问题的答案就像跳过延迟属性一样简单,但我不知道该怎么做,因为访问属性会导致提取过程开始。
如果我所拥有的只是Model
一个混合了延迟和非延迟属性的 a 实例的句柄,有没有办法确定一个属性是否是 aDeferredAttribute
而无需访问它?
python - Django CacheMachine 中的错误忽略模型的保存?
我有一个非常简单的 Django 类:
当我执行 CRUD 类型的操作时,此类工作正常:
现在我在类定义中添加/修改 3 行以启用CacheMachine:
在manage.py makemigrations
and之后manage.py migrate
,我截断数据库,刷新 memcached 并运行我之前运行的相同实验。
然而这个实验失败了!保存新创建的 MyClass 实例后,查询数据库显示它不存在。为什么?如何解决这个问题?有没有其他人看过这个?
仅供参考,我对此处显示的 Django Cache Machine 进行了测试。他们都通过了。
python - 为什么 Django 返回陈旧的缓存数据?
我有两个 Django 模型,如下所示,MyModel1
& MyModel2
:
MyModel2
有一个 ManyToMany 字段MyModel1
有权model1
现在看看当我向这个 ManyToMany 字段添加新条目时会发生什么。根据Django,它没有效果:
为什么?这似乎绝对是一个缓存问题,因为我看到数据库表 myapp_mymodel2_mymodel1 中有一个新条目用于m2
&之间的链接m1
。我该怎么修??
django - 如何使用 Gunicorn/WSGI 网络服务器运行 Django 应用程序?
我有我现有的 Django 应用程序在我的 MacBook 上本地运行。它的目录结构看起来像这样:
到目前为止,我一直在使用 Django 玩具网络服务器来运行我的应用程序:./manage.py runserver 0.0.0.0:8000
. 但现在我想用 gunicorn 代替。所以我按照这里的说明进行操作。
我愿意 source myVirtualenv/bin/activate && cd myproject && gunicorn mySite.wsgi
。我收到以下错误:
当我./manage.py runserver 0.0.0.0:8000
从同一个位置运行时,它工作得非常好。
为什么?难道我做错了什么?Django-Cache-Machine 不能与 Gunicorn/WSGI 一起使用吗?如何解决这个问题?
django - Django 自定义 cache_page 装饰器在之后唯一的第一次运行时返回错误,没关系
我为我的应用程序创建了自定义cache_page
装饰器。它在第一次运行时不起作用并抛出与中间件相关的错误:
content_encoding = response.get("Content-Encoding", "")
AttributeError: 'bool' object has no attribute 'get'
但是在第二次和更进一步的运行中,它可以工作,因为缓存已设置。我安装了 django debug_toolbar 并将 cors 中间件添加到我的中间件中。有人可以帮忙吗?这是我的自定义装饰器功能: