django项目和个人应用程序的真正含义

时间:2013-08-18 02:55:26

标签: django django-apps

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/只是一个主文件夹“将事物拼接在一起”但个别事情应该只在{{} {1}},但不限于此。最好是/foo/shop//foo/web//foo/products//foo/forum//foo/controlpanel//foo/shop//foo/helpdesk/等。

这是对的吗?我应该将所有与产品相关的内容放在/foo/backoffice/中,包括存储管理,运输,经销商,价格等,然后将这些产品的管理(从员工方面)转移到/foo/products/,这将作为某种“/foo/backoffice/”为此?那是对的吗?然后,如果我想为多个客户托管多个这样的实例(具有完全独立的数据库和东西),我应该只创建一个准系统,将这些东西放在一起,配置设置,然后只是移动单个组件的某种类型中央存储库并通过django.contrib.admin在项目中调用它们?因为那太酷了!我的意思是 - 全局进行所有更改,不要触及用户数据和配置,除非必要(在模型中添加列等)。这是真的应该如何使用django?或者我是否完全偏离轨道并且做错了完全错误而且这一段只是没有做出任何 django-sense

我对此比较陌生。我之前一直在使用PHP,尽管Django是一个痛苦的基础,但我并不后悔,并且计划弃用并使我创建的任何PHP项目脱机并将它们全部替换掉与django。嗯 - 它有意义,不是一个单一用途的网站。不仅因为Django非常棒且功能多样,而且我可以轻松扩展它......

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

谢谢!

1 个答案:

答案 0 :(得分: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"),
)

你猜对了,它是really basic website

  

并完全在/ foo / shop /中完成所有操作,但我在/ foo / foo / etc中编辑urls.py。

     

我正在关注Django书,但我开始变得那么奇怪了   觉得/ 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 /,包括存储管理,运输,经销商,   价格等,然后管理这些产品(来自员工   to)/ foo / backoffice /,这将作为某种形式   “django.contrib.admin”为此?这是对的吗?

你应该看看open source projects,看看他们是如何划分的。

根据您所表示的目录树,您似乎已经理解了这一点,但您的陈述似乎很模糊,因此我将尝试澄清它。

应用程序通常以模型为导向。因此,如果我创建一个product应用,它可能包含:

  • 产品型号,
  • 产品列表,编辑,创建,删除和详细视图
  • 视图的网址,
  • 产品管理员,
  • 测试产品和视图,
  • django.contrib.admin将使用其他django应用程序(如product/admin.py)使用的其他内容,但django-autocomplete-light等外部应用程序将使用product/autcomplete_light_registry.py和django-rules- light会使用product/rules_light_registry
  

然后,如果我想托管这个的多个实例(完全   我应该只为多个客户分开数据库和东西   创建一个将这些东西放在一起的准系统项目   配置设置,然后只需移动单个组件   某种中央存储库,并通过它在项目中调用它们   INSTALLED_APPS?

有许多方法可以使用django进行SaaS。但我同意,最简单,最方便的是维护通用应用程序并为每个客户构建一个项目,重新使用(并最终覆盖部分)这些应用程序。