【问题标题】:Pythonic way of using getters and setters使用 getter 和 setter 的 Pythonic 方式
【发布时间】:2014-07-31 00:53:34
【问题描述】:

我想要一种 Pythonic 方式来完成以下任务。 在活动模型中调用一个方法,该方法返回一个带有活动 ID 和当前登录用户 ID 的 URL,即/campaign_id/user_id

要实现这一点,我需要request.user 范围,但我认为直接在我的模型中使用它并不是一个好主意。我一直在阅读 Python 可以使用 getter 和 setter,这有用吗?所以我的想法是有这样的东西......

campaign = Campaign.object.get(id=1)
campaign.set_current_user(request.user)

referral_url = campaign.get_referral_url()

which would give me /campaign_id/user_id/

这是个好方法吗?

到目前为止我的模型:

class Campaign(models.Model):
   name = models.CharField(max_length=120)

   @property
   def current_user(self):
       return self._current_user

   @current_user.setter
   def current_user(self, user_object):
      if user_object:
          return user_object.id
      else:
          return None


   def _build_referral_url(self):
        """
        Builds the full referral URL for the user.
        :return:
        """
        return self.name + "/" + self.current_user


    def get_referral_url(self):
        """
        :return: Campaign referral URL.
        """
        return self._build_referral_url()

【问题讨论】:

  • set_current_user 在做什么?如何从 Campaign 模型中引用用户?如果你有外键,你应该显示它。
  • 请提供更多上下文。为什么要将用户 ID 放在 URL 中?
  • @Kos 更新了 OP 中的代码。当我在视图中加载活动时,我希望能够从使用当前登录用户构建的模型中获取自定义链接。用户没有链接到模型,我也不想访问模型中的请求范围。这是我目前能想到的最好方式。
  • 但是您还没有解释为什么要这样做。您总是知道当前用户(在request.user 中),那么将 ID 放入 URL 有什么意义,尤其是当您说用户根本没有链接到广告系列时。为什么所有这些current_user 的东西?
  • @Daniel Roseman 好点。我在想我可以使用模型方法,然后让 URL 更复杂。所以它更多的是我需要的一个功能,那就是根据传递的值构建一个 URL。但也许你是对的,我想太多了。

标签: python django


【解决方案1】:

代替:

def get_referral_url(self):

简单定义:

def get_referral_url_for(self, user):

这看起来最直接,并且不会给人一种错误印象,即所讨论的user 会以某种方式永久连接到Campaign

【讨论】:

  • 好的,所以只有一种方法,即 def get_campaign_url_for_user(self, user):
猜你喜欢
  • 2011-02-07
  • 1970-01-01
  • 2011-04-14
  • 2017-09-09
  • 1970-01-01
  • 2022-12-09
相关资源
最近更新 更多