在 django 3.2 中,从视图或外部视图调用的函数中访问用户 ID 的最简洁方法是什么?
我想在我的项目中实现缓存,但它需要特定于每个用户。 我以为我可以简单地访问用户 ID 并将其集成到缓存密钥中。 问题是这样做需要访问请求对象,并且我经常需要在视图调用的函数中进行访问。
我不想更改所有函数来添加请求对象,除非这是最好的解决方案。
是否可以在请求期间设置类似全局的东西,以便在访问视图后可以在任何地方访问它? 看起来这会进入线程并且看起来很hacky。
FWIW 目前我正在使用 django-cache-memoize 它可以完成我需要的一切 https://github.com/peterbe/django-cache-memoize
还有我也喜欢的memcached。
我最好的建议是将 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')
这里需要注意的是,缓存不会在请求结束时以任何方式过期。您可以手动执行此操作...或者,如果您有很多视图,您可以编写一个中间件,分别根据请求和响应设置和删除缓存键。