基于变量的大功能更改

时间:2009-12-10 12:20:25

标签: django python

我的情况是,我有一个项目,在很多不同的应用程序中都有大量的Django视图。大量客户端正在使用相同的代码库和数据库。有一些特定于站点的用例正在进入,这需要编写相当多的自定义代码。

我想提出一个策略,我们可以使用默认功能,然后根据用户参数替换django视图等等。理想情况下,每个站点都有一个中央代码库和项目或应用程序,但由于当前的部署策略,我没有看到如果没有大规模的重构,这是如何实现的。

我不喜欢这个想法,但它可能会更好地演示问题,基本上有一些方法可以动态加载另一个模块并替换那些在views.py中完成工作的模块。或类似函数装饰器,检查该函数的替换,并调用该函数或调用默认值,如果它找不到它。可以使用like this

来完成动态加载

我在这里遇到的问题是代码库非常大,我当然需要保留当前的API并尽可能保持向后兼容性。

基本上我正在寻找建议以最诡计多端的方式来做到这一点。

1 个答案:

答案 0 :(得分:3)

最pythonic的方法是为视图使用类,然后使用继承覆盖每个视图的特定部分。在你的描述中,你描述的东西听起来就像继承。

您可能需要查看两个相关的SO问题class views in djangodjango class view with decorator and sessions

继承将为您提供执行此次细粒度重载的工具,我认为这样做。

这当然需要一些API更改,但现在最好这样做,而不是等到项目大小的两倍!