Django逻辑和放在哪里?

时间:2017-03-09 19:36:01

标签: python django

我是Django的新手,但我最近创建了我的第一个应用程序。我想知道我是否把我的逻辑放在了错误的地方。从Django书中,我得到了逻辑,但是应该放入模型中的视图和数据中。但我最近读过,视图应该尽可能小,让模型处理逻辑。我的问题是我的视图处理所有我的逻辑,而我的模型只处理进出数据库的数据。创建这个应用程序时我搞砸了吗?如果是这样,我该如何修复它?

4 个答案:

答案 0 :(得分:2)

Django的哲学/最佳实践鼓励" 胖模型瘦控制器" (控制器是Django中的视图)。尝试过两种方式,它确实可以更好地与'#34;胖模型"做法。保持逻辑与数据模型的接近使其更具可重用性,并且Django中有许多功能可以更好地工作。

一个例子是返回分页列表视图。如果您需要为查询集中的每个对象计算某些内容,则可以

  • 在执行计算的视图中循环它
  • 或者您可以添加模型方法,然后在模板中的每次迭代中调用它。

在视图中循环查询集将对整个查询集进行计算 - 如果您只显示1000个列表中的10个对象,那就不好了。

从模板调用模型方法,只对该页面上的10个对象进行计算。

显然,您可以在视图中添加更多代码,仅对该页面上的对象进行计算,但如果您选择其他路径则不需要额外的代码。如果您需要在另一个页面上进行相同的计算,则在不进行任何更改的情况下保持模型方法中的逻辑将是可重用的,而您需要在视图中剪切并粘贴它,或者创建新方法。虽然它没有太大的区别,但许多像这样的小事情开始加起来。

答案 1 :(得分:1)

最好有“胖模特,瘦视角”。许多Django专家会给你这个提示。谷歌这个短语,你会发现一些资源,说“脂肪模型,瘦视图”或“脂肪模型,瘦的控制器”。顺便说一句,Django创建者将控制器命名为视图,将视图命名为模板,这可能会在阅读有关MVC(Django中的MTV)的文章时引起一些误解。

答案 2 :(得分:0)

不,你不会搞砸它。您可以通过经验(多年的开发)找到您的解决方案。

因此,要么使用胖模型和精简视图,要么与您和您的应用程序要求相反。

随着您的学习,您将发现有助于扩展您的逻辑的新技术和方法。和您的应用实施。

在开始的时候,你会犯错误,但那没关系。我们需要他们成为更好的开发人员,编码人员等。

所以我的建议是:保持冷静和学习(良好做法)

答案 3 :(得分:0)

这样做的方法很简单。而且我会说,如果你的逻辑主要在于观点,那实际上并没有搞砸。

您在多个函数的视图中使用的最重复的函数和逻辑,您可以创建在模型中定义的函数,然后在视图中调用该函数。 (你可以一步一步地完成)

例如,如果它是社交网络,并且您正在设置用户的城市。现在,随着您的应用程序的增长,可能会有许多功能和许多城市设置的地方。如果您在视图中执行所有操作,那么您将在某个时间点陷入困境,因为要进行最小的更改,您可能需要编辑所有函数。

好方法是在用户模型中定义set_cities(self, cities)并在需要时调用它,如user.set_cities(cities_list)。因此,如果您每次设置城市时都必须触发其他功能(可能像发送通知或更新其他表格),则必须仅在set_cities()中定义一次。

在任何情况下,所有逻辑都不能只在模型中,所以不要太担心它。继续尝试简化视图并继续将任何重复的逻辑转移到模型。