Django 应用组织结构
我最近在看一些Django的教程,发现所有的视图函数都得放在一个叫“views.py”的文件里,而所有的模型都放在“models.py”里。我有点担心,等我写的视图函数多了,views.py文件会变得很大,models.py也是一样。
我对Django应用的理解是对的吗?
Django应用可以让我们把一些常见的功能分成不同的应用,这样可以让视图和模型的文件保持小巧吗?比如说:我的项目可以有一个专门处理食谱的应用(包括创建、更新、查看和搜索),还有一个朋友应用、评论应用等等。
我能不能把一些视图函数移动到其他文件里?这样我就可以把CRUD(创建、读取、更新、删除)操作放在一个文件里?
3 个回答
我也非常不喜欢长文件。
当然,其他回答里说的都是对的,但我利用了一些很巧妙的 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
等等。
当然,没有限制(网址也可以拆分,等等等等)。
这些东西不一定要放在views.py里,但需要在那儿被引用。
views.py可以包含其他文件。所以,如果你觉得有必要,可以在一个应用里创建其他文件,把你的视图函数放在里面,然后在views.py中引用它们。
models.py也是一样的道理。
Django应用让我们可以把一些常见的功能分开到不同的应用中,这样可以让views和models的文件大小保持在一个较小的范围内?比如:我的项目可以有一个专门处理食谱的应用(创建、更新、查看和搜索),还有一个朋友应用、评论应用等等。
至于“保持在一个较小的范围内”这部分我就不太确定了——有些应用的视图部分比较大,有些模型部分比较大。你应该努力把东西分得更清楚,但有时候代码就是多。不过除此之外,这确实是对Django应用的一个合理总结。
首先,Python中大文件是很常见的。Python和Java不一样,Java每个文件只能有一个类,而Python每个文件可以有一个模块。
接下来,views
虽然是一个常用的标准,但它其实是一个Python模块。模块不一定是一个单独的文件,它可以是一个包含多个文件的文件夹,并且里面有一个叫__init__.py
的文件。
然后,views.py
只是一个约定。你,作为应用程序的开发者,可以这样称呼它,而Django本身并没有特别提到这个文件。所以,你可以把它放在多个文件里,并在urls.py
中引用相应的函数来处理请求。