【问题标题】:Different behavior for specific clients针对特定客户的不同行为
【发布时间】:2013-10-31 08:40:24
【问题描述】:

我正在开发一个使用大量客户端的系统。
一些客户希望系统的特定行为,例如:不同的 html 代码或不同的报告,或者他们希望跳过某些命令执行。
要指定此行为,我使用如下代码:

if sender.id == 123:
    do_something()

现在我有很多带有“if”的字符串,它确实阻止了代码读取。有什么模式可以解决这个问题吗?一般来说,我正在寻找可以将逻辑与独特条件分开的方法。

【问题讨论】:

    标签: python django settings


    【解决方案1】:

    如果是纯粹的演示(模板),您可以为不同的用户行为指定特定的模板。
    我还建议不要检查用户 ID,而是使用某种额外的模型来扩展用户模型。这样数据就可以在不改变代码的情况下进行编辑。

    【讨论】:

      【解决方案2】:

      我决定使用装饰器。当我有一些特定于某些客户端的代码时,我用包含我放置在文件“decorators.py”中的装饰器的函数来包装它。示例:

      视图.py def some_function(请求): do_some_usual_stuff() ... @do_specific_stuff_decorator def do_specific_stuff(发件人): 返回 sender.price1 + sender.price2 value = do_specific_stuff(request.sender) ... 装饰器.py def do_specific_stuff_decorator(do_specific_stuff) def 内部(发件人): #sender foo 在某些情况下不需要支付 price2 如果 sender.name = 'foo': 价格 = 发件人.price1 别的: 价格 = do_specific_stuff(发件人) 返回值 返回内部

      装饰器的这种用法提醒您,这部分代码包含某些客户端的特定行为,但阅读最重要的代码很清楚。

      【讨论】:

      • 顺便说一句,基于群体而不是个人不是更好的主意吗? Django 为用户组提供了强大的支持,将特定用户硬编码到 t 中听起来是个坏主意。我会为应用程序应该表现不同的人创建一个组,以便可以轻松地将他们添加到其中(可以通过编程方式完成)
      猜你喜欢
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      相关资源
      最近更新 更多