SQL和关系数据库
在早期的web里,内容都是手工编写的HTML,一般都是保存在文件系统上,像这样的被称之为静态内容.静态页面生成器很多,比如静态博客生成器里有大名鼎鼎的Pelican.之所以称为”静态”,是因为同样的URL请求,返回的信息总是一样的.现今,大多数的网站都是动态的,因为一个给定的URL可以根据参数的不同返回完全不一样的结果.
这种动态特性主要是通过将数据保存在数据库中实现的,在数据库中,数据不在是简单的一个文本字符串了,你可以创建多个组成部分的数据,将它们连在一起来表达其中的相互关系.SQL(结构化查询数据语言)是一种用来定义和查询数据库的语言,通常被进一步抽象为一个ORM(对象关系映射),它可以将数据库中的数据映射为面向对象语言里的代码关系.
SQL数据库按照表(table)的形式来组织,每张表则由行(row,例如条目,对象)和列(column,属性,变量)组成,基本上和数据表格很相似.Django提供了一个强大的ORM机制,Python的类就代表了表,对象代表了其中的每一行,而对象的属性则代表了列.
Django分层
Django遵循分层原则,不过在做法上跟常规的MVC却略有不同.首先模型部分保持不变,Django的模型层只负责传入传出数据.Django里的视图并不是数据显示的最后一部,Django里的视图其实更接近MVC里传统意义上的控制器.视图是用来将模型层和表示层(由HTML和Django的模板语言组成)连接在一起的Python函数.
换一种说法,Django把表示层一分为二,视图方法定义了要显示模型离的什么数据,而模板则定义了最终信息的显示方式.Django框架自己则充当了控制器的角色,它提供了决定什么视图和什么模板一起响应给定请求的机制.
下面是自己对Django的MVC(MTV)的理解:
(更正:上图中是”MVT”)
模型
若将应用程序分层,模型将是最底层的一层,它是基础.视图和模板可以根据数据进出模型的方式以及对表现的形式任意替换,但模型却相对稳定得多.
从设计整个Web应用的角度来说,模型可能是最容易领会却也是最难掌握的部分.在面向对象系统里对一个现实问题进行建模相对来说通常不难,但对于大流量网站来说,最符合实际的模型却不一定总是最有效的.
模型里有很多潜在的陷阱,其中一个就是在应用程序部署后修改模型的代码.虽然表面上你”只是在修改代码”,但实际上确实在修改底层的数据库模式,这经常会对已经存储在数据库里的数据产生不良的副作用.
视图
视图组成了Django应用程序离很多(有时候几乎是全部)的逻辑.它们的定义是实际上却很简单:它们是链接到一个或多个定义URL上的Python函数,这些函数都返回一个HTTP响应对象.在Django的HTTP机制两端之间要执行什么操作完全在你的控制之下.实际上,这一步通常只有一些简单的任务要完成,例如显示一个或一列从模型里取得的对象.或者往模型里添加这样的新对象,加上一些额外的工作比如检查应用程序用户验证的状态并决定是访问还是拒绝.
模板
基本上,模板就是一些输出动态值的经过特殊格式化的HTML文本,支持简单的逻辑结构如循环等.当一个视图要返回一个HTML文档时,它通常会指定一个模板,提供给它所要显示的信息,并在响应里使用模板渲染的结果.
Django框架总览
MVC模板的Django的术语里应该是”MTV”.视图作为控制器通过ORM负责从数据库创建,更新和删除数据库模型,同时根据给定的模板管理最终用户看到的结果.