使用python和django,我们正在创建一个框架来运行许多科学模型。 Python运行模型,django用于跟踪状态并创建输出到网页。在操作模式下,这可以正常工作,因为整个平台(数据库,django可执行文件)都可用。但是,对于新模型的离线创建和测试,我的同事经常使用独立代码,与环境无关。然后django部分通常是一个负担(环境,数据库需要设置,计算开销)。所以我们正在寻找一种方法来打开和关闭Django函数。
目前我们有一个通用的类iModel,它具有在框架中运行任何模型的所有功能,也有一些django调用。子类继承自此类,并包含特定于模型的功能。
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "framework.settings")
import django.some.modules
class iModel(iModel):
def run(self):
some django calls (eg. change status in DB to 'running')
self.prepareInputdata()
self.runModel()
some more calls (eg. change status in DB to 'finished')
def prepareInputData(self):
example of some code that is used by all child models
class CATmodel(iModel):
def runModel(self):
some specific code for CAT-model
class DOGmodel(iModel):
def runModel(self):
some specific code for DOG-model
我在考虑将类iModel拆分为两个类。一个额外的类iClassWithDjango(),它将继承自iModel并添加Django功能。作为iModel类的包装。
头等舱
class iModel(Object):
def run(self):
self.prepareInputDate()
self.runModel()
和第二课
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "framework.settings")
import django.some.modules
class iModelWithDjango(iModel):
def run(self):
some django calls (eg. change status in DB to 'running')
super(iModelWithDjango,run)
some more calls (eg. change status in DB to 'finished')
根据情况(操作或离线),DOGmodel和CATmodel将继承resp。来自iModelwithDjango()或iModel()。因此,在运行时动态更改父类。
实际上我最大的问题是如何处理django模块的导入。如何防止在离线模式下发生这种情况(因为未设置django环境会失败)。我的想法是将iModelWithDjango()放在一个单独的模块文件中(如上所述),但也许有更好的方法可以做到这一点。
也许有很多杂乱的编码,我可以把它拉下来,但我希望你们中的一些人可以引导我进行一些干净的编码练习。欢迎任何建议
答案 0 :(得分:0)
如果我理解您的问题,您希望有条件地将(导入)模块链接到您的项目。有多种方法可以做到。
一种方式是:
if standAlone:
from iModel import IModel
runner = IModel
else:
from iModelWithDjango import IModelWithDjango
runner = IModelWithDjango
runner().run()