如何在活塞类方法中访问request.user
问题内容:
我有一个模型,其中包含对用户的ManyToMany,以跟踪哪些用户“收藏”了特定模型实例。
在此模型的API中,当经过身份验证的用户请求时,我想包含一个“
is_favorite”布尔值。但是,似乎不是直接模型属性的任何api字段都必须实现为类方法,该类方法在Piston中调用时不会获得对请求对象的引用,因此我无法知道当前用户是谁是。
从活塞文档:
除了这些之外,您还可以定义所需的任何其他方法。 您可以通过将它们的名称包含在fields指令中来使用它们,然后,
将使用单个参数调用该函数:模型的实例。 然后,它可以返回任何内容,并且返回值将用作该键的值。
因此,如果仅Piston CRUD方法获得了请求的实例,我的classmethod字段如何生成与当前经过身份验证的用户相关的输出?
问题答案:
我不知道活塞API,但是如何使用线程本地中间件访问请求
将此添加到中间件
try:
from threading import local
except ImportError:
from django.utils._threading_local import local
_thread_locals = local()
def get_request():
return getattr(_thread_locals, 'request', None)
class ThreadLocals(object):
def process_request(self, request):
_thread_locals.request = request
并使用ThreadLocals中间件更新设置
以及您想import get_request
从中间件访问请求的任何地方
如果您只想获取当前用户,请修改中间件以仅request.user
在线程本地中设置