0

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/,但我urls.py在里面编辑/foo/foo/等等。

我一直在关注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 吗?还是我完全偏离了轨道,做的事情完全错了,而这一段没有任何django 意义

我对此比较陌生。我以前一直在使用 PHP,尽管 Django 很难掌握基本的知识,但我并不后悔,并计划弃用我迄今为止创建的任何 PHP 项目并使它们脱机并全部替换与 django。嗯 - 它是有意义的,不是一个单一用途的网站。不仅因为 Django 很棒而且用途广泛,而且我还可以轻松扩展它……</p>

那么……我应该如何真正设计 Django 项目、应用程序,以及如何在生产中使用它们,将它们提供给多个客户?

谢谢!

4

1 回答 1

4

我的意思是 - 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/ 等中。

好吧,你应该定义,并从ie/foo/shop/urls.py导入它:/foo/foo/urls.py

urlpatterns = patterns("",
    url(r"^shop/", include("shop.urls")),
)

关键是让您的应用程序更方便地在其他 django 项目中重用。

那是对的吗?我应该把所有与产品相关的东西都放在 /foo/products/ 中,包括存储管理、运输、经销商、价格等,然后将这些产品的管理(从员工方面)放在 /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 的方法有很多。但我同意最简单和最方便的是维护通用应用程序并为每个客户构建一个项目,以重用(并最终覆盖部分)这些应用程序。

于 2013-08-18T03:14:17.543 回答