MVC 和 django 基础知识

Posted

技术标签:

【中文标题】MVC 和 django 基础知识【英文标题】:MVC and django fundamentals 【发布时间】:2010-09-26 17:08:04 【问题描述】:

对这个场景很陌生,并试图找到一些文档以采用最佳实践。我们正在构建一个相当大的内容站点,其中将包含各种媒体目录,我正在尝试找到一些可比较的数据/架构模型,以便我们可以更好地了解我们应该使用我们从未使用过的框架使用的方法以前用过。任何见解/帮助将不胜感激!

【问题讨论】:

【参考方案1】:

“数据/架构模型,以便我们可以更好地了解我们应该使用以前从未使用过的框架使用的方法”

Django 将最佳实践强加给您。你没有太多选择,也不会犯很多错误。

MVC(虽然是崇高的愿望)实现如下:

使用 Django ORM 模型在“models.py”文件中定义数据。 urls.py 文件将 URL 映射到查看功能。明智地选择您的网址。 视图函数做所有的处理,利用模型中的模型和方法 View 函数调用的演示文稿(通过 html 模板)。演示中基本上无法进行任何处理,只是轻量级的迭代和决策

模型是为您定义的。只要坚持 Django 自然做的事情,你就会快乐。

在架构上,您通常有这样的堆栈。

Apache 做了两件事。

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

Django 视图函数使用的数据库。

架构已为您明确定义。只要坚持 Django 自然做的事情,你就会快乐。

欢迎阅读Django documentation。太棒了;也许是最好的。

【讨论】:

如果你关心性能或内存使用,最好有一个单独的轻量级网络服务器(例如 nginx)来提供静态内容,而不是同时使用 Apache(尽管你可以得到类似的如果您在守护进程模式和 Apache worker MPM 中使用 mod_wsgi 则效果)。 @Carl Meyer:或 lighttpd 用于提供静态内容。【参考方案2】:

首先,忘记所有 MVC 口头禅。拥有一个良好的分层结构很重要,但 MVC(如最初定义的)不是一个,它是一个 模块化 结构,其中每个 GUI 模块在这些树中拆分子模块。这里没有什么可以在网络上使用的。

在 Web 开发中,分层结构确实很划算,其中最重要的层是存储/建模层,后来被称为 模型层。除此之外,您还需要一些其他层,但它们实际上与 GUI 世界中的视图和控制器不同。

Django 层大致如下:

存储/建模:models.py,显然。尝试将大部分“工作”概念放在那里。所有的关系,所有的操作都应该在这里实现。 调度:主要在 urls.py 中。在这里,您将 URL 方案转换为代码路径。把它想象成一个大的 switch() 语句。努力使 URL 具有可读性,这些 URL 映射到用户意图。添加新功能或执行相同操作的新方法(例如稍后的 AJAX UI)将大有帮助。 收集:主要是视图函数,包括您的和预构建的通用视图。在这里,您只需从模型中收集所有信息以满足用户请求。在令人惊讶的许多情况下,它只需要选择一个模型实例,其他所有内容都可以从关系中检索。对于这些 URL,一个通用视图就足够了。 介绍:模板。如果视图为您提供了所需的数据,那么将其转换为网页就足够简单了。在这里,您会感谢模型类具有良好的访问器,可以从任何给定实例获取任何类型的相关数据。

【讨论】:

【参考方案3】:

要了解 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

【讨论】:

以上是关于MVC 和 django 基础知识的主要内容,如果未能解决你的问题,请参考以下文章

Django框架-基础篇

django框架基础

Django基础

Django综合基础知识

django 基础 学习

Django基础第一篇