Django最佳实践:每个文件中的模型类数量/目录结构

7

对于有经验的人来说,另一个最佳实践问题是:你会在一个文件中放置多少个模型?

我看到很多例子都把所有的模型类放到一个“models.py”文件中,但这真的让我感觉不对。在之前使用其他技术栈的项目中,我会为每个模型类创建一个单独的文件。在Django中,对于包含20个模型类的非平凡应用程序,正确的做法是什么?目录结构会是什么样子呢?


你的应用程序为什么会有20个模型呢? - Ignacio Vazquez-Abrams
确实。谢谢。这将是项目/网站中的多个应用程序。我想当我问目录结构时,我的意思就是这个。 - Withnail
看我的回答,但如果你在询问目录结构,请按它们的功能命名。它们代表什么?它们向其他应用程序公开了哪些API? - Elf Sternberg
1个回答

15
许多人,尤其是来自Rails世界的人,会被"应用程序"这个术语所困扰,并开始将所有东西都放入一个单一的应用程序中。在Django中,应用程序是一个单一使用模块,它只做一件事情并且做得很好。每个应用程序应该可以用一两个简短的句子描述。 "项目"是由设置文件统一的应用程序集合。即使对于像我现在发现的在线商店这样复杂的东西,将超过四五个模型放在一个单一的应用程序中也是一个警示信号:最好是store应用程序(其中包含购物车)依赖于product应用程序,而不是将两者都放在同一个应用程序中。对于invoicespayments等也是如此。

看一下Django in the Real World,Jacob Kaplan-Moss关于如何编写Django应用程序的演示。

Django应用程序是封装的:它描述了一个简单对象(或对象集合)及其API。拥有20个模型听起来像是您没有一个清晰的API,因此也没有明确的概念,这个应用程序要做什么。

你想要的答案是"这取决于你的应用程序做什么"。为此,一个有20个模型的应用程序到底是干什么的?拿起你的重构副本,开始愉快地学习吧。


感谢你和Ignacio指出我提问措辞上的缺陷。那么,你们在每个应用程序的models.py文件中是否有这四个或五个模型? - Withnail
通常是的。它们代表一个单一的连贯思想。我做过的最复杂的应用程序可能是电影公司的图书馆:电影,参与者(演员,导演,作家等),节日,奖项,所有这些都与电影相关。我可以将它们拆分成单独的应用,并使用Django的关系管理器使它们对模板可用,我想。但总共只有四个模型。这个想法是它们都形成一个连贯的思想:“一部电影及其元数据”或其他什么。“商店中的购物车”,“场景故事,场景人物和设置”。每个应用程序一个想法。 - Elf Sternberg
嗯,也许我在 Django 中过度规范化了? - Withnail
感谢提供《Django在现实世界中》的链接,它非常有启发性。 - Stephen Paulger
有人知道这个演示的视频演示是否存在吗?我已经谷歌搜索过了,但似乎找不到。 - Jack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接