Django 应用组织结构

6 投票
3 回答
1898 浏览
提问于 2025-04-15 23:38

我最近在看一些Django的教程,发现所有的视图函数都得放在一个叫“views.py”的文件里,而所有的模型都放在“models.py”里。我有点担心,等我写的视图函数多了,views.py文件会变得很大,models.py也是一样。

我对Django应用的理解是对的吗?

Django应用可以让我们把一些常见的功能分成不同的应用,这样可以让视图和模型的文件保持小巧吗?比如说:我的项目可以有一个专门处理食谱的应用(包括创建、更新、查看和搜索),还有一个朋友应用、评论应用等等。

我能不能把一些视图函数移动到其他文件里?这样我就可以把CRUD(创建、读取、更新、删除)操作放在一个文件里?

3 个回答

1

我也非常不喜欢长文件。

当然,其他回答里说的都是对的,但我利用了一些很巧妙的 Python 特性:

views.py

views/__init__.py

在功能上几乎是一样的——我的意思是,如果它们都包含 def my_view(),那么

from views import my_view

在这两种情况下都能正常工作!

从这里开始,你可以很容易地把长文件拆分成小文件,同时保持每个 Django 开发者都习惯的命名方式:

views/__init__.py
views/largemodel_view.py

然后在 __init__.py 中别忘了从 largemodel_view.py 导入视图。

对于大型应用,我在模型上也这样做,但你必须记得设置 Meta.app_name

class MyModel(models.Model):
    ...

    class Meta:
        app_name = 'yourappname'

因为否则 Django 不会自动识别它用于管理界面(不过它还是会加载,感谢 Python!)

所以我的应用通常看起来像这样:

project/settings/__init__.py
                /..othersettings..
       /app_1/models/__init__.py
                    /...
             /views/__init__.py
                   /...
             /templates/
             /static/
             urls.py
       /urls.py

等等。

当然,没有限制(网址也可以拆分,等等等等)。

1

这些东西不一定要放在views.py里,但需要在那儿被引用。

views.py可以包含其他文件。所以,如果你觉得有必要,可以在一个应用里创建其他文件,把你的视图函数放在里面,然后在views.py中引用它们。

models.py也是一样的道理。

Django应用让我们可以把一些常见的功能分开到不同的应用中,这样可以让views和models的文件大小保持在一个较小的范围内?比如:我的项目可以有一个专门处理食谱的应用(创建、更新、查看和搜索),还有一个朋友应用、评论应用等等。

至于“保持在一个较小的范围内”这部分我就不太确定了——有些应用的视图部分比较大,有些模型部分比较大。你应该努力把东西分得更清楚,但有时候代码就是多。不过除此之外,这确实是对Django应用的一个合理总结。

9

首先,Python中大文件是很常见的。Python和Java不一样,Java每个文件只能有一个类,而Python每个文件可以有一个模块。

接下来,views虽然是一个常用的标准,但它其实是一个Python模块。模块不一定是一个单独的文件,它可以是一个包含多个文件的文件夹,并且里面有一个叫__init__.py的文件。

然后,views.py只是一个约定。,作为应用程序的开发者,可以这样称呼它,而Django本身并没有特别提到这个文件。所以,你可以把它放在多个文件里,并在urls.py中引用相应的函数来处理请求。

撰写回答