Django:将业务逻辑与视图逻辑分离
Posted
技术标签:
【中文标题】Django:将业务逻辑与视图逻辑分离【英文标题】:Django: separating business logic from view logic 【发布时间】:2013-12-15 03:05:36 【问题描述】:可能的参考:Separation of business logic and data access in django
在我的 Django 应用程序中,我试图找出在哪里包含我的业务逻辑。该逻辑不适合任何模型(假设它是一个没有任何模型的单页应用程序)所以我想添加一个包含逻辑的模块。例如,
项目/应用程序/my_logic.py
def calculate(number_one, number_two):
return number_one + number_two
然后,我会使用类似的逻辑,
项目/app/views.py
def index(request):
number = my_logic.calculate(1, 2) #can I do this?
return HttpResponse("the number is: %s " % number)
问题:
my_logic.py
的正确放置位置在哪里?
是传统的吗?
有什么更好的方法?
注意:这是您导入模块的方式(如果其他人试图弄清楚如何做)
project/app/your_module/your_module.py
project/app/your_module/__init__.py
来自views.py,
from app.your_module import your_module
【问题讨论】:
【参考方案1】:取决于,但如果它是一个逻辑单元,那么一个单独的 python 模块将是一个好的开始,你当然会为它编写自己的单元测试(与 Django 与 TestClient 的内置集成测试相反)。
如果它需要在模型中工作,那么模型上的属性会更好。
【讨论】:
如果我想让它成为一个单独的python模块,我必须将my_module.py
放在django项目目录中的哪个位置?
我只是把它作为应用程序中的一个新文件夹。所以 app/stats/logic.py。稍后您可以将其移动到它自己的 python 依赖项(不要忘记将 init.py 添加到文件夹中,这样它是可导入的)。
那么,在views.py
,我应该做import stats
,使用logic.calculate()
这样的方法,对吧?如何从 django shell 导入 stats
包?
Import stats
工作,但 stats.my_module.calculate()
引发 module object has no attribute "my_module"
错误。
from stats import my_module; my_module.calculate()
以上是关于Django:将业务逻辑与视图逻辑分离的主要内容,如果未能解决你的问题,请参考以下文章