【问题标题】:Django: separating business logic from view logicDjango:将业务逻辑与视图逻辑分离
【发布时间】: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)

问题:

  1. my_logic.py 的正确放置位置在哪里?
  2. 是传统的吗?
  3. 有什么更好的方法?

注意:这是您导入模块的方式(如果其他人试图弄清楚如何做)

project/app/your_module/your_module.py
project/app/your_module/__init__.py

来自views.py,

from app.your_module import your_module

【问题讨论】:

    标签: python django


    【解决方案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()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    相关资源
    最近更新 更多