django 项目和其中的各个应用程序的真正含义是什么?
我的意思是 - AFAIK 你不能创建一个项目并完全生活在你创建的项目中,你必须在该项目中创建一个应用程序才能在 django 中实际做一些事情。如果我错了,请纠正我。
现在 django 项目的真正结构应该是什么?我正在写一个电子商店。假设我的项目名为 foo
:
/foo
/foo
/settings.py
/templates
/urls.py
/wsgi.py
/shop
/__init__.py
/admin.py
/models.py
/tests.py
/views.py
并完全在/foo/shop/
中完成所有操作,但我在/foo/foo/
等内部编辑urls.py
。
我一直在关注 Django Book,但我开始获得一种奇怪的感觉,/foo/foo/
只是为了一个主文件夹"将东西缝合在一起",但个别的东西应该只在/foo/shop/
中完成,但不限于。优选在/foo/web/
、/foo/products/
、/foo/forum/
、/foo/controlpanel/
、/foo/shop/
、/foo/helpdesk/
、/foo/backoffice/
等。
这是对的吗?我是否应该将所有与产品相关的内容放在/foo/products/
中,包括存储管理,运输,经销商,价格等,然后将这些产品的管理(从员工方面(放在/foo/backoffice/
,这将作为某种"django.contrib.admin
"?这是对的吗?然后,如果我想为多个客户托管多个实例(具有完全独立的数据库和东西(,我是否应该只创建一个准系统项目,将这些东西放在一起,配置设置,然后只是在某种中央存储库中移动单个组件并通过INSTALLED_APPS
在项目中调用它们?因为那会很酷!我的意思是 - 全局进行所有更改,除非必要,否则不会触及用户数据和配置(在模型中添加列等(。这就是 django 真正应该使用的方式吗?还是我完全偏离了轨道,做错了事情,而这一段没有任何姜戈意义?
我对此比较陌生。我以前一直在使用 PHP,尽管 Django 在基本掌握方面很痛苦,但我并不后悔,并计划弃用我迄今为止创建的任何 PHP 项目并将其离线化,并将它们全部替换为 django。好吧 - 它有意义并且不是一个单一用途的网站。不仅因为 Django 很棒且用途广泛,而且我也可以轻松扩展它......
所以。。。我应该如何真正设计 Django 项目、应用程序,以及如何在生产中使用它们,将它们提供给多个客户?
谢谢!
我的意思是 - AFAIK 你不能创建一个项目并完全生活在你创建的项目中,你必须在该项目中创建一个应用程序才能在 django 中实际做一些事情。如果我错了,请纠正我。
您可以在一个项目上做很多事情,但您需要一个应用程序来自动发现模型。
例如,我有一个项目,urls.py:
class Homepage(generic.TemplateView):
template_name = 'homepage.html'
def get_context_data(self):
context = cache.get('homepage')
if not context:
management.call_command('reset_cache')
context = cache.get('homepage')
return context
urlpatterns = patterns("",
url(r"^$", Homepage.as_view(), name="home"),
)
你猜对了,这是一个非常基本的网站。
并完全在/foo/shop/中执行所有操作,但我在/foo/foo/等中编辑 urls.py。
我一直在关注Django Book,但我已经开始获得那种奇怪的东西 感觉/foo/foo/只是为了一个主文件夹"缝合的东西 在一起",但个别的事情应该只在/foo/shop/中完成,但是 不限于。最好在/foo/web/,/foo/products/,/foo/forum/, /foo/controlpanel/
,/foo/shop/,/foo/helpdesk/,/foo/backoffice/etc.
好吧,您应该定义/foo/shop/urls.py
,并将其从/foo/foo/urls.py
导入,即:
urlpatterns = patterns("",
url(r"^shop/", include("shop.urls")),
)
关键是让你的应用程序更方便地在其他 django 项目中重用。
这是对的吗?我应该把所有与产品相关的东西都放进去吗 /foo/products/,包括存储管理、运输、经销商、 价格等,然后把这些产品的管理(从员工那里 side( 到/foo/backoffice/,这将作为某种 "django.contrib.admin"为此?这是对的吗?
你应该看看开源项目,看看他们是如何划分的。
根据您代表的目录树,您似乎已经理解了这一点,但是您的陈述似乎很模糊,因此我将尝试澄清它。
应用通常以模型为导向。因此,如果我制作一个product
应用程序,它可能包含:
- 产品模型,
- 产品列表、编辑、创建、删除和详细信息视图
- 视图的网址,
- 产品管理员,
- 产品和视图的测试,
- 其他 Django 应用程序(如
product/admin.py
(使用的其他东西将由 Django.contrib.admin 使用,但像 Django-autocomplete-light 这样的外部应用程序将使用product/autcomplete_light_registry.py
,Django-rules-light 将使用product/rules_light_registry
然后,如果我想托管此的多个实例(完全 单独的数据库和东西(对于多个客户,我应该只 创建一个准系统项目,将这些东西放在一起,以 配置设置,然后只需将单个组件移入 某种中央存储库,并通过以下方式在项目中调用它们 INSTALLED_APPS?
有很多方法可以用django做SaaS。但我同意,最简单和最方便的是维护通用应用程序,并为每个客户构建一个项目,以重用(并最终覆盖部分(这些应用程序。