django app组织

时间:2010-06-07 01:44:17

标签: python django

我一直在阅读一些django教程,似乎所有视图函数都必须放在一个名为“views.py”的文件中,所有模型都放在“models.py”中。我担心我的view.py文件中可能会有很多视图函数,而models.py就是这种情况。

我对django应用程序的理解是否正确?

Django应用程序允许我们将常用功能分成不同的应用程序,并将视图和模型的文件大小保持在最低限度?例如:我的项目可以包含食谱(创建,更新,查看和搜索)和朋友应用程序,评论应用程序等应用程序。

我还可以将一些视图功能移动到其他文件吗?所以我只在一个文件中使用CRUD?

4 个答案:

答案 0 :(得分:7)

首先,大文件在python中很常见。 Python不是java,每个文件有一个类,而不是每个文件一个模块。

接下来,views,即使是使用的标准,也是 python模块。模块不必是单个文件。它可以是包含许多文件的目录,__init__.py

然后,views.py只是一种惯例。 ,应用程序员指的是它,而django本身并没有在任何地方引用。因此,您可以自由地将其放入尽可能多的文件中,并在urls.py

中引用要移交的相应函数。

答案 1 :(得分:1)

他们不必进入views.py。必须在那里引用它们。

views.py可以包含其他文件。因此,如果您觉得有必要,可以在一个包含视图函数的应用程序中创建其他文件,并将它们包含在views.py中。

同样适用于models.py。

  

Django应用程序让我们分开常见   功能到不同的应用程序和   保持视图和模型的文件大小   到最低限度?例如:我的项目   可以包含食谱的应用程序   (创建,更新,查看和搜索)和   朋友应用,评论应用等等   上。

我不知道“至少”部分 - 一些应用程序在视图中很大,而其他应用程序在模型中很重要。你应该努力对事情进行分区,但有时会有很多代码。但除此之外,这是Django应用程序的公平摘要,是的。

答案 2 :(得分: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

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

答案 3 :(得分:0)

question的答案可能对您有所帮助。