Django中的“app”是什么?
根据文档的说明:
一个“应用”就是一个能做某件事情的网页应用,比如说,一个博客系统、一个公共记录的数据库,或者一个简单的投票应用。而一个“项目”则是为某个特定网站收集的配置和应用的集合。一个项目可以包含多个应用,而一个应用也可以出现在多个项目中。
那么,还有哪些其他例子可以说明什么是“应用”呢?
3 个回答
用户管理其实可以做成一个独立的应用,如果你不打算使用Django自带的用户管理框架的话。
它有用户界面和定义好的数据模型,跟博客或维基应用是分开的(虽然信息会共享)。
只要这两个应用在同一个“项目”里,它们就应该使用相同的数据库设置。你只需要确保在需要使用的地方正确导入相应的模型就可以了。
想了解更多信息,可以查看这个链接。
Django应用是一些可以重复使用的功能模块。刚开始的时候,很多人可能会选择只用一个自定义的应用来完成项目,但“Django的做法”是把它拆分成多个小应用,每个应用只负责一件事情。你可以看看django.contrib,里面有一些做得非常好的可重用应用的例子。
我最近的一个例子是:一个客户需要一种方法将CSV数据导入到Django模型中。最简单的方法就是添加一个带有FileField的模型,然后为他们上传的特定格式写一个快速解析器。这样做没问题,直到格式发生变化,我又得去调整解析器以匹配新的格式。但这个导入数据的任务是经常需要做的,而且和现有的应用(管理这些数据)没有关系,所以我把它单独拆出来了。这个可插拔的应用可以为任何活跃的模型导入数据。现在,下次客户需要导入功能时,我只需将这个代码添加到installed_apps中,然后运行syncdb就行了。
什么时候把一个应用单独拆出来,这个判断需要自己做决定。对我来说,经验法则是如果我可能会再做一次某件事,我就会花点时间把它做成一个通用的应用。这意味着我创建了一些小应用(有些只包含一个模板标签),但这对未来的收益来说是值得的,付出的时间不算多。
我们认为一个应用程序的关键在于:
应用程序是可重复使用的单位
如果我们可能想把它拆分出来在别的地方使用,那它就是一个应用程序。
如果它有一个可以重复使用的数据模型,那它也是一个应用程序。比如用户资料:应用程序。客户信息:应用程序。客户统计历史(这个不太好解释,不想说太多细节):应用程序。报告功能:应用程序。精算分析:应用程序。用于数据收集的供应商API:应用程序。
如果它是独特的,并且永远不会被重复使用(也就是说,它是针对特定客户的),那么它就是一个依赖其他应用程序的应用程序。数据加载是针对特定客户的。每个都是一个应用程序,它建立在一对现有的应用程序之上(批量上传和统计历史)。