Django的架构
简介
Django继承并简化了MVC架构。MVC中的Controller部分基本全由Django完成。View部分被分割成两部分,即:负责HTML渲染的模板和负责显示逻辑的视图。所以Django又被称为MVT(Model-View-Template)框架。这个Django除了MVT框架的核心部分(O/R映射工具、URL分配器(Dispatcher)、视图、模板系统)之外。还有管理界面、缓存系统、国际化支持、表单处理等机制和功能。
使用Django开发Web应用站点时,需准备一个承载着Django实例及数据库设置等内容的工程,然后通过在该工程中新建几个应用或者调用外部应用,或者将二者结合起来进行开发。由于每个应用的本质都是Python程序包,所以只要按功能(模型、视图、模板等、)对这些包进行分析,完全可以拿到其他工程中重复利用。
Django架构处理请求的流程
1.客户端发来的HTTP请求被视为Django的请求对象。
2.URL分配器负责搜索并调用被请求的URL所对应的视图
3.被调用的视图根据情况使用模型或模板生成相应的对象
4.相应对象作为HTTP形影发回给用户
Django的组成
工程
工程是承载了Django实例的所有设置的Python程序包。大部分情况下,一个Web站点就是一个工程。工程内可以新建及存放该工程固有的应用,或者保存Web站点的设置(数据库设置、Django的选项设置、各应用的设置等)
应用
对于Django而言,应用之的是表示单一工程的Web应用的Python程序包。由于其本质就是Python程序包,因此方法PYTHONPATH有效地任何位置都没有问题。这里最好尽量减少应用与工程、应用于应用之间的依赖关系,做到功能独立,以便在其他工程中重复利用。
模型
Django提供了O/R映射工具,因此可以用Python代码来描述数据库布局。
每个模型都是继承了django.db.models.Model类的Python的类,分别对应数据库中的一个表格。通过建数据库的字段、关系、行为定义为模型类的属性或方法,我们可以使用丰富且灵活的数据库方位API。
URL分配器
URL分配器机制使得URL信息不再受框架及扩展名的制约,从而让Web应用的URL设计保持简介。
URl在URlconf模块中进行描述,URLconf模块中包含使用正则表达式书写的URL和Python函数的映像。URlconf能够以应用为单位进行分割,因此提高了应用的可重复利用性。另外,我们可以利用给URL设置名称并定义的方式让代码和目标直接通过该名称调用URL,从而将URL设计与代码分离。
视图
Django的视图时一类函数,它能够生成指定页面的HttpResponse对象或像Http 404这样的异常情况,返回HTTP请求。典型的视图函数的处理流程通常是从请求参数中获取数据,读取模型,热按后根据获取的数据渲染模板。
模板系统
在Django的概念中,模板系统只负责显示,并不是编写逻辑代码的环境。因此Django的模板系统将设计与内容、代码分离开来,是一共功能强、扩展性高、对设计者很友好的模板语言。
模板基于文本而不是XML,因此它不但能生成XML和HTML,还能生成E-mail、JavaScript、CSV等任意文本格式。
另外,如果使用模板继承功能,子模板只需要将父模板中预留的空位填满即可。我们在编写模板时只需要描述各个模板独有的部分,因此可以省去重复冗余的编码过程。
管理界面
大多Web应用在运行过程中,都需要一个专供拥有管理员权限的用户添加、编辑、删除数据的界面,但是实际制作这个界面并不容易。
Django只需将已经完工的模型添加到管理站点,就能根据模型定义,动态地生成页面。为我们提供一个功能齐全的管理界面。
缓存系统
Django可以使用memcached等缓存后端轻松地缓存数据。比如可以将动态页面的渲染结果缓存下来,等到下次需要时直接读取缓存,从而不必每次都对动态页面进行处理。
缓存的后端可以从memcached、数据库、文件系统、本地内存等位置进行选择。缓存对象也支持整个网站、特定的整个视图、部分模板、特定数据等。