什么';使用特定于请求的属性装饰Django模型是一种干净的方法吗?
我正在将用户对象序列化为JSON,我想在JSON响应中指出序列化的用户是否与发出请求的用户是朋友 我已经在我的用户模型中添加了一个to_dict()方法,该方法进行序列化对象所需的预处理——这是一个添加表示友谊的属性的好地方,但是由于User.to_dict()没有访问请求对象的权限,所以我似乎无法在那里执行该操作 在视图中执行此操作很容易,但我不想在其他视图中重复此代码。我想“升级”用户对象以请求感知用户对象 django.contrib.auth用户模型有一个is_authenticated属性,它实际上是请求的属性,而不是模型的属性——该属性仅在特定web请求的上下文中才有意义什么';使用特定于请求的属性装饰Django模型是一种干净的方法吗?,django,json,request,Django,Json,Request,我正在将用户对象序列化为JSON,我想在JSON响应中指出序列化的用户是否与发出请求的用户是朋友 我已经在我的用户模型中添加了一个to_dict()方法,该方法进行序列化对象所需的预处理——这是一个添加表示友谊的属性的好地方,但是由于User.to_dict()没有访问请求对象的权限,所以我似乎无法在那里执行该操作 在视图中执行此操作很容易,但我不想在其他视图中重复此代码。我想“升级”用户对象以请求感知用户对象 django.contrib.auth用户模型有一个is_authenticated
好像我应该用RequestUser的实例替换request.user,这是一个新类,它接受一个用户和一个请求,并添加请求特定的属性。什么是干净的方法呢?这并不能真正回答您的问题,但您确定要通过用户的方法处理友谊吗?我这样说是因为:
a.is\u friends\u与(b)==b.is\u friends\u与(a)
)。例如,如果以后要缓存调用的结果,可以定义一个函数,该函数只接受用户对象作为任意顺序的参数;以及我的方法是在任何表示友谊的模型上定义一个manager方法,并显式地将用户传递给该模型,如:
友谊.objects.are\u friends(其他用户,request.user)
您可以创建auth.user的代理模型,并在其中添加您的is\u friends方法
至于is_认证方法,它比您想象的要简单一些。用户上下文处理器使一种特殊类型的用户在未登录时可用,即匿名用户。调用is_authenticated时,此类始终返回False。同样,当调用is_authenticated时,常规用户类总是返回True
简而言之,不要担心请求对象。如果当前用户未登录,则视图中可用的用户变量将使用AnonymousUser类,并且找不到您的is\u friends方法。代理模型听起来是对用户进行子类化的好方法,谢谢。谢谢,要点很好。为什么是关于友谊的经理方法而不是班级方法,即友谊。你是朋友吗(a,b)?我已经为这个问题补充了一些细节——想听听你的想法。谢谢类方法也有意义。与类外的实用程序函数一样。我在考虑一个manager方法,因为您可能希望将它链接到其他manager方法(例如filter)之后,以在更有限的查询集中检查
是否是朋友,但这可能不是必需的/可取的。