如何让 Django 缓存机器在 django.contrib.auth.models.User 上工作?
How to get Django Cache Machine to work on django.contrib.auth.models.User?
我正在使用 Django Cache Machine 来缓存我的 Django ORM 对象。这是一款很棒的软件。它极大地减少了我几乎所有模型的数据库访问——而且使用简单。
但是,仍然没有缓存一个模型:django.contrib.auth.models.User
。因为那不是我自己的应用程序代码,所以我没有为它配备 Cache Machine 指令告诉您添加到每个模型的 CachingMixin
。所以现在即使我自己的应用程序的所有模型都被缓存了,User
模型却没有。因此仍然有许多不必要的数据库访问。
消除这些数据库访问的最佳方法是什么? django.contrib.auth.models.User
不是我在 Git 中的代码库的一部分。我宁愿根本不更改那个 class 或模块的源代码。
您需要制作一个 custom user model 来保留 Dajgno User 模型的功能,同时添加缓存混合。
我想这就足够了:
from caching.base import CachingManager, CachingMixin
from django.contrib.auth.models import AbstractUser, UserManager
class CachedUserManager(CachingManager, UserManager):
pass
class CachedUser(CachingMixin, AbstractUser):
objects = CachedUserManager()
当然,在您的 settings.py:
AUTH_USER_MODEL = 'myapp.CachedUser'
我正在使用 Django Cache Machine 来缓存我的 Django ORM 对象。这是一款很棒的软件。它极大地减少了我几乎所有模型的数据库访问——而且使用简单。
但是,仍然没有缓存一个模型:django.contrib.auth.models.User
。因为那不是我自己的应用程序代码,所以我没有为它配备 Cache Machine 指令告诉您添加到每个模型的 CachingMixin
。所以现在即使我自己的应用程序的所有模型都被缓存了,User
模型却没有。因此仍然有许多不必要的数据库访问。
消除这些数据库访问的最佳方法是什么? django.contrib.auth.models.User
不是我在 Git 中的代码库的一部分。我宁愿根本不更改那个 class 或模块的源代码。
您需要制作一个 custom user model 来保留 Dajgno User 模型的功能,同时添加缓存混合。
我想这就足够了:
from caching.base import CachingManager, CachingMixin
from django.contrib.auth.models import AbstractUser, UserManager
class CachedUserManager(CachingManager, UserManager):
pass
class CachedUser(CachingMixin, AbstractUser):
objects = CachedUserManager()
当然,在您的 settings.py:
AUTH_USER_MODEL = 'myapp.CachedUser'