在你的项目根目录中有十几个Django应用程序是典型的中高规模站点吗?不觉得臃肿吗?

2024-06-11 02:46:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在看django mingus的已安装应用程序:

INSTALLED_APPS = (
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.sites',
  'django.contrib.admin',
  'django.contrib.sitemaps',
  'django.contrib.flatpages',
  'django.contrib.redirects',

  'django_extensions',
  'tagging',
  'djangodblog',
  'disqus',
  'basic.inlines',
  'basic.blog',
  'basic.bookmarks',
  'basic.media',
  'oembed',
  'flatblocks',
  'dbtemplates',
  'navbar',
  'sorl.thumbnail',
  'template_utils',
  'django_proxy',

  'django_markup',
  'google_analytics',
  'robots',
  'basic.elsewhere',
  'compressor',
  'contact_form',
  'honeypot',
  'sugar',
  'quoteme',
  'mingus.core',
  'debug_toolbar',

  'django_twitter',
  'django_bitly',
  'staticfiles',
  'tinymce',
  'django_wysiwyg',
  'cropper',
  'memcache_status',
  'request',
)

这确实有点臃肿。但我认为这并没有看上去那么糟糕,因为django只使用请求的内容,因为它不会为每个请求加载每个应用程序,而是只在调用它时加载它?如果没有,有人能揭开这个过程的神秘面纱吗?在


Tags: appsinstalleddjangoauth应用程序flatpagesbasicadmin
3条回答

显然,其中一些是第三方的,处理它们时将它们隔离在/apps中(如果有很多的话,甚至在它们的子目录中)是保持目录结构正常的一个很好的解决方案,正如lazerscience指出的那样。在

至于你自己的应用程序,这是一个很好的问题,一天两次在django上出现,我很乐意看到各种观点的综合。在

当我决定是否要制作一个单独的应用程序时,我通常会问自己:这个新应用程序的模型是否会与之前的应用程序完全不同?如果一个应用程序是关于人(比如说作者),而另一个是关于物质财富(比如,书),那么把它们分开是有意义的。需要自己的应用程序吗?显然不是。在

我知道其他开发者更关注应用程序的视图——他们会问自己,“我的调度器中会有多少个顶级术语?”从那里走。我认为这在很多情况下也是一个很好的方法,但是对于许多项目来说,大约90%的模型和视图将主要或完全与10%的顶级URL术语相关。在

一般来说,拥有大量的应用程序本身并不是坏事。只有当它成为团队的组织问题时,它才会变得糟糕。在

我认为在你的INSTALLED_APPS中找到很多应用程序是很常见的。为了在包/目录结构中保留一些系统,我认为建议将你的应用程序放在^{} folder within your project root内,同时保留其他第三方应用程序,这样你就不会在你的PYTHONPATH上接触其他地方。我认为使用类似PIP and virtualenv这样的工具来跟踪和组织应用程序是非常值得推荐的。 在这里您可以阅读另一篇关于useful directory structure for django projects的文章。在

如果一个应用程序在你的INSTALLED_APPS中,django总是在启动时加载它的模型,并用这些类填充它的APP_CACHE,但我认为如果你在处理传统的应用程序,这是一个可以忽略的开销。。。在

编辑:还要考虑到应用程序在复杂程度上有很多不同,例如,tinymce主要只是提供了一个小部件和一些视图,但是没有模型,所以如果不使用它,它只会在urlresolver中添加一些URL,就这样。。。在

嗯,Mingus是一个专门的项目,旨在演示多个可重用组件的使用,因此它使用其中很多组件并不奇怪。在

一打听起来不算太臃肿,说实话-我肯定做过更多的网站。但是在任何情况下,您不应该从请求的角度考虑:Django,或者更确切地说是mod\wsgi,不会为每个请求启动一个堆栈。相反,Apache动态地管理进程,它们在启动时加载所需的代码,并且该进程对于许多请求都是持久的。这是相当有效的。在

相关问题 更多 >