我有一个模型,其中包含一个ManyToMany用户,以跟踪哪些用户'偏爱'特定模型实例。
在我的这个模型的API中,当经过身份验证的用户请求时,我想包含一个'is_favorite'布尔值。但是,似乎任何不是直接模型属性的api字段都必须实现为类方法,当在Piston中调用时不会获得对请求对象的引用,因此我无法知道当前用户是谁是
来自活塞的文档:
除此之外,您还可以定义所需的任何其他方法。您可以通过在fields指令中包含它们的名称来使用它们,通过这样做,将使用单个参数调用该函数:模型的实例。它可以返回任何内容,并返回value将用作该键的值。
因此,如果只有Piston CRUD方法获取请求的实例,我的classmethod字段如何生成与当前经过身份验证的用户相关的输出?
答案 0 :(得分: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
答案 1 :(得分:0)
从活塞wiki page开始,它表示您可以通过嵌套属性来指定外键和多对多字段的内容。在你的情况下
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
编辑:这样做的另一个有点hacky的方法(如果你不希望朋友在is_friended为false的情况下完全通过)将是手动创建一个dict对象,结构如何你喜欢,然后返回它。活塞处理字典与内置发射器一起工作(肯定是JSON,没有尝试其他发射器)