django 中独特的基于用户的缓存

问题描述 投票:0回答:1

在 django 3.2 中,从视图或外部视图调用的函数中访问用户 ID 的最简洁方法是什么?

我想在我的项目中实现缓存,但它需要特定于每个用户。 我以为我可以简单地访问用户 ID 并将其集成到缓存密钥中。 问题是这样做需要访问请求对象,并且我经常需要在视图调用的函数中进行访问。

我不想更改所有函数来添加请求对象,除非这是最好的解决方案。

是否可以在请求期间设置类似全局的东西,以便在访问视图后可以在任何地方访问它? 看起来这会进入线程并且看起来很hacky。

FWIW 目前我正在使用 django-cache-memoize 它可以完成我需要的一切 https://github.com/peterbe/django-cache-memoize

还有我也喜欢的memcached。

django caching
1个回答
0
投票

我最好的建议是将 LocMemCache 添加为非标准缓存,然后指定在需要线程本地缓存时使用它:

# settings.py
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    },
    'local': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    },
# views.py
from django.core.cache import caches
def view(request):
    cache = caches['local']
    cache.set('user', request.user)
# functions.py
from django.core.cache import caches

cache = caches['local']

def function():
    user = cache.get('user')

这里需要注意的是,缓存不会在请求结束时以任何方式过期。您可以手动执行此操作...或者,如果您有很多视图,您可以编写一个中间件,分别根据请求和响应设置和删除缓存键。

© www.soinside.com 2019 - 2024. All rights reserved.