django - 用特定于请求的属性装饰 Django 模型的干净方法是什么?

标签 django json request

我正在将 User 对象序列化为 JSON,我想在 JSON 响应中指明序列化的用户是否与发出请求的用户是 friend 。

我在我的 User 模型中添加了一个 to_dict() 方法,该方法执行序列化对象所需的预处理 - 这将是添加指示友谊的属性的好地方,但由于 User.to_dict() 没有访问请求对象,我似乎无法在那里进行。

在 View 中执行此操作很容易,但我不想在其他 View 中重复该代码。我想将用户对象“升级”为请求感知用户对象。

django.contrib.auth User 模型有一个 is_authenticated 属性,它实际上是请求的属性而不是模型的属性——该属性仅在特定 Web 请求的上下文中有意义。

就好像我应该用 RequestUser 的一个实例替换 request.user,一个新的类,它接受一个 User 和一个 Request 并添加特定于请求的属性。有什么干净的方法可以做到这一点?

最佳答案

这并不能真正回答您的问题,但是您确定要通过 User 上的方法来处理友谊吗?我这样说是因为:

  • 围绕友谊的逻辑大概在另一个应用程序中,因此您可能希望明确调用该应用程序中定义的函数;
  • 友谊几乎总是一种对称关系,因此在 User 上使用方法会导致冗余( a.is_friend_with(b) == b.is_friends_with(a) )。例如,如果您稍后想要缓存调用的结果,那么定义一个简单地接受用户对象作为任意排序参数的函数是有意义的;和,
  • 您可能不想对 HttpRequest 或 User 做任何太花哨的事情,因为这可能会使其他开发人员感到困惑。

  • 我的方法是在任何代表友谊的模型上定义一个管理器方法,并明确地将用户传递给它,如下所示:Friendship.objects.are_friends(other_user, request.user) .

    关于django - 用特定于请求的属性装饰 Django 模型的干净方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2215286/

    相关文章:

    json - 不使用 for 语句解析 JSON 数组

    java - Java 的 REST 和 HTTP API 客户端,如 RestSharp(http ://restsharp. org/)

    python - 可以在不添加 URL 模式的情况下在 django 中注册 namespace 吗?

    django - 如何为动态用户类型扩展 Django 组?

    json - swiftyJSON 从 NSURL 解析 json

    ios - RestKit 为所有请求添加自定义 header ?

    swift - 在alamofire管理器类swift中添加公钥固定

    objective-c - ASIHTTPRequest 错误不断出现

    django - 从 Git 克隆后,如何在 Ubuntu EC2 中编辑 Django 项目?

    python - AWS Elastic Beanstalk 不使用我的 virtualenv : "No module named boto"