【问题标题】:wondering how to architect this in django想知道如何在 django 中构建它
【发布时间】:2013-12-17 13:28:59
【问题描述】:

我现在正在做一个大的 django 项目。

巨大的主题门户,包含许多主题中心、书籍和其他媒体资料、作者资料和普通用户资料,他们也可以有作者资料..

现在我要做的是:

一个 django 应用程序,像往常一样的模板文件夹,现在随着我创建模板,模板的数量变得巨大..

我从未体验过在一个项目中拥有多个应用程序..

有人可以告诉我这是否可以,或者我是否应该使用多个应用程序?

或者如果我换一种说法:在一个项目中拥有多个应用程序什么时候有意义?

提前致谢

【问题讨论】:

    标签: django django-models django-project-architect


    【解决方案1】:

    Django 在拥有多个应用程序时茁壮成长。 1 个用于用户注册的应用、1 个用于个人资料的应用、1 个用于 cmets 的应用、1 个用于发布博客的应用等。

    正如您所指出的,在一个应用程序中执行所有操作会很快导致混乱。使用 Django 的最佳方法是创建许多非常具体的应用程序。如果您愿意,这还允许您拥有更多可以在其他项目中重复使用的应用程序。

    一个 Django 项目有许多可能的“结构”。我会选择最模块化的方法。对于每一项功能,只需问问自己:这是否直接属于另一个应用程序?如果答案是否定的,那么您最好为它创建一个单独的应用程序。

    例如,可以在多个网站上使用同一个博客发布应用程序,您只需更改模板以使其适合页面的新布局/设计。所有的逻辑应该大体相同。并且博客文章的逻辑不应与查看个人资料或其他内容的逻辑相关联。

    示例:对于评论应用,模型可能如下所示:

    from django.db import models
    
    from profile.models import Profile
    from blog.models import Blog
    
    class Comment(models.Model):
        user = models.ForeignKey(Profile, related_name='comments')
        blog = models.ForeignKey(Blog, related_name='comments')
        message = models.CharField(max_length=200)
    

    【讨论】:

    • 谢谢,非常好的指导。我想知道,因为所有模型都是相关的,如果我将它们分成多个应用程序,我不会破坏关系吗?
    • 您可以从不同的应用程序导入模型,就像从同一个应用程序导入模型一样容易。我将通过快速示例更新答案。
    • 您可以在不同应用的模型之间创建ForeignKeys。请注意不要创建循环(例如,应用 A 依赖于 B,而 B 又依赖于 A,...);如果您不小心,它们不仅会创建导入循环,而且它们通常也是架构过于复杂的标志...
    • @EWit,伙计,这太棒了。太谢谢你了,你给我亮了,到现在我真的很迷茫
    • 模型之间的电路导入很常见。
    【解决方案2】:

    您可以拥有不依赖于其他应用程序的核心应用程序(很可能类似于)

    • 带有核心模板视图和模型的核心应用 (
    • 具有身份验证模板和模型的帐户
    • 包含有用内容的工具应用程序

    和使用上述内容的“应用程序”应用程序

    • topiccenter1 - 特定模板、视图和模型
    • topiccenter2 - 特定模板、视图和模型

    一个不错的结构是“Two Scoops of Django”中的一个模板 https://github.com/twoscoops/django-twoscoops-project

    “谢谢你,非常好的指导。我想知道因为所有模型都是相关的,如果我将它们分成多个应用程序,我不会破坏关系吗?”

    您应该能够跨应用划分模型 - 阅读:

    Define ManyToMany relation in another application in Django

    Django relationships between apps: How to keep apps separate?

    【讨论】:

      猜你喜欢
      • 2011-08-19
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      相关资源
      最近更新 更多