MVC和Django基础知识

9

我对这个领域还比较新,正在寻找一些文档来采用最佳实践。我们正在构建一个相当大的内容网站,其中包括各种媒体目录,我正在寻找一些可比较的数据/架构模型,以便我们更好地了解应该使用什么方法,使用我们从未使用过的框架。任何见解/帮助将不胜感激!

3个回答

16

我们需要了解数据/架构模型,以便更好地理解应该使用哪种方法来使用我们以前从未使用过的框架。

Django会向你强制推荐最佳实践。你没有很多选择,也不能犯太多错误。

MVC(虽然是一种高贵的愿望)的实现如下:

  • 在“models.py”文件中使用Django ORM模型定义数据。
  • urls.py文件将URL映射到视图函数。明智地选择自己的URL。
  • 视图函数执行所有处理,利用模型和模型中的方法。
  • 通过HTML模板进行呈现(由视图函数调用)。基本上不能在展示中进行处理,只有轻量级的迭代和决策-making

模型已经为您定义好了。只要坚持使用Django自然而然的方式,您就会感到满意。

从架构上讲,通常有这样的堆栈。

  • Apache有两个功能。

    • 直接并立即提供静态内容
    • 通过mod_python、mod_wsgi或mod_fastcgi将动态URL传递给Django。Django应用程序将URL映射到视图函数(这些视图函数通过ORM/model访问数据库并通过模板显示)。
  • Django视图函数使用的数据库。

架构已经为您明确定义了。只要坚持使用Django自然而然的方式,您就会感到满意。

请随意阅读Django文档。它非常好,可能是最好的。


如果您关心性能或内存使用情况,通常最好使用单独的轻量级Web服务器(例如Nginx)来提供静态内容,而不是同时使用Apache(尽管如果您在守护程序模式下使用mod_wsgi和Apache工作进程管理器,则可以获得类似的效果)。 - Carl Meyer
@Carl Meyer:或者使用lighttpd来提供静态内容。 - S.Lott

5
首先,忘记所有的MVC口号。拥有良好的分层结构非常重要,但MVC(最初定义的)不是一个分层结构,而是一个模块化结构,其中每个GUI模块分为这三个子模块。在Web上没有任何用处。
在Web开发中,拥有分层结构确实很有益处,其中最重要的层是存储/建模层,也被称为模型层。在此之上,您需要其他几个层,但它们与GUI世界中的视图和控制器完全不同。
Django的层大致如下:
- 存储/建模:models.py,显然应该将大多数“工作”概念放在这里。所有关系和操作都应在此实现。 - 分派:主要在urls.py中。在这里,您将URL方案转换为代码路径。想象一下它就像一个大的switch()语句。尽力使用可读性强的URL,将其映射到用户意图。对于添加新功能或以后使用相同功能的新方式(如AJAX UI),这将非常有帮助。 - 收集:主要是视图函数,包括自己的和预构建的通用视图。在这里,您只需收集来自模型的所有内容以满足用户请求。在许多情况下,它只需要选择单个模型实例,并且其他所有内容都可以从关系中检索。对于这些URL,通用视图就足够了。 - 呈现:模板。如果视图为您提供所需的数据,则将其转换为网页非常简单。在这里,您将感谢模型类具有良好的访问者,以获得任何给定实例的任何相关数据。

1

要了解Django的基础知识和Django对MVC的看法,请参考以下内容: http://www.djangobook.com/

作为开始动手实践的起点... “...试图找到一些可比较的数据/架构模型”

这里有一个快速而简单的方法来反向工程化数据库,以获取models.py文件, 然后您可以检查它以了解Django如何处理它。

1.) 获取与目标紧密匹配的ER图。例如像这样的东西 http://www.databaseanswers.org/data_models/product_catalogs/index.htm

2.) 从ER图创建SQL脚本并创建数据库, 我建议使用Postgre,因为某些MySQL表类型将没有外键约束,但在紧急情况下,MySQL或SQLITE也可以。

3.) 创建和配置一个Django应用程序来使用该数据库。 然后运行: python manage.py inspectdb

这至少会给您一个models.py文件,您可以阅读它以了解Django如何尝试对其进行建模。

请注意,inspect命令旨在成为Django开发中处理遗留数据库的快捷方式,因此并不完美。在尝试使用之前,请务必阅读以下内容: http://docs.djangoproject.com/en/dev/ref/django-admin/#ref-django-admin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接