如何在活塞类方法中访问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在线程本地中设置