3

我有一个模型,其中包含对用户的多对多,以跟踪哪些用户“收藏”了特定的模型实例。

在此模型的 API 中,当经过身份验证的用户请求时,我想包含一个“is_favorite”布尔值。但是,似乎任何不是直接模型属性的 api 字段都必须实现为类方法,在 Piston 中调用该方法时不会获得对请求对象的引用,因此我无法知道当前用户是谁是。

来自活塞文档:

除了这些,您还可以定义您想要的任何其他方法。您可以通过将它们的名称包含在 fields 指令中来使用它们,并且这样做,将使用单个参数调用该函数:模型的实例。然后它可以返回任何东西,并且返回值将用作该键的值。

那么,如果只有 Piston CRUD 方法获取请求的实例,我的 classmethod 字段如何生成与当前经过身份验证的用户相关的输出?

4

2 回答 2

0

我不知道活塞 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在线程本地设置

于 2010-08-27T01:41:22.533 回答
0

从活塞维基页面它说您可以通过嵌套属性指定外键和多对多字段的内容。在你的情况下

class FriendHandler(BaseHandler):
    allowed_methods = ('GET',)
    model = User
    fields = ('userfield_1', 'userfield_2', ('friends', ('is_friended')))

    def read(self, request):
        # Anything else you might want to do, but return an object of type User
        # Or whatever your model happens to be called

编辑:另一种稍微笨拙的方法(如果您不希望朋友在 is_friended 为假的情况下完全通过)是手动创建一个您喜欢的结构的 dict 对象,然后返回它。活塞使用内置发射器处理 dict (肯定是 JSON 的,没有尝试过其他的)

于 2011-09-20T02:12:33.690 回答