特定客户的不同行为

时间:2013-10-22 12:55:29

标签: python django settings

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

if sender.id == 123:
    do_something()

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

2 个答案:

答案 0 :(得分:0)

如果是纯粹的演示文稿(模板),您可以为不同的用户行为指定特定的模板 我还建议不要检查userid,而是使用某种额外的模型来扩展用户模型。因此,无需更改代码即可编辑数据。

答案 1 :(得分:0)

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

view.py

def some_fuction(request):
    do_some_usual_stuff()
    ...
    @do_specific_stuff_decorator
    def do_specific_stuff(sender):
        return sender.price1 + sender.price2

    value = do_specific_stuff(request.sender)
    ...

decorators.py

def do_specific_stuff_decorator(do_specific_stuff)
    def inner(sender):
        #sender foo doesn't need to pay price2 in some cases
        if sender.name = 'foo':
            price = sender.price1
        else:
            price = do_specific_stuff(sender)
        return value
    return inner

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