问题标签 [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.

0 投票
2 回答
13004 浏览

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 而无需访问它?

0 投票
2 回答
263 浏览

python - Django CacheMachine 中的错误忽略模型的保存?

我有一个非常简单的 Django 类:

当我执行 CRUD 类型的操作时,此类工作正常:

现在我在类定义中添加/修改 3 行以启用CacheMachine

manage.py makemigrationsand之后manage.py migrate,我截断数据库,刷新 memcached 并运行我之前运行的相同实验。

然而这个实验失败了!保存新创建的 MyClass 实例后,查询数据库显示它不存在。为什么?如何解决这个问题?有没有其他人看过这个?

仅供参考,我对此处显示的 Django Cache Machine 进行了测试。他们都通过了。

0 投票
4 回答
1429 浏览

python - 为什么 Django 返回陈旧的缓存数据?

我有两个 Django 模型,如下所示,MyModel1& MyModel2

MyModel2有一个 ManyToMany 字段MyModel1有权model1

现在看看当我向这个 ManyToMany 字段添加新条目时会发生什么。根据Django,它没有效果:

为什么?这似乎绝对是一个缓存问题,因为我看到数据库表 myapp_mymodel2_mymodel1 中有一个新条目用于m2&之间的链接m1。我该怎么修??

0 投票
2 回答
859 浏览

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 一起使用吗?如何解决这个问题?

0 投票
1 回答
409 浏览

django - Django 自定义 cache_page 装饰器在之后唯一的第一次运行时返回错误,没关系

我为我的应用程序创建了自定义cache_page装饰器。它在第一次运行时不起作用并抛出与中间件相关的错误:

content_encoding = response.get("Content-Encoding", "")

AttributeError: 'bool' object has no attribute 'get'

但是在第二次和更进一步的运行中,它可以工作,因为缓存已设置。我安装了 django debug_toolbar 并将 cors 中间件添加到我的中间件中。有人可以帮忙吗?这是我的自定义装饰器功能: