Django简介 阅读: 278629     评论:16

引言

我们都知道,Django是基于Python的Web开发框架。

那么,什么是Web开发?

Web开发指的是开发基于B/S架构,通过前后端的配合,将后台服务器的数据在浏览器上展现给前台用户的应用。比如将电子购物网站的商品数据在浏览器上展示给客户,在基于浏览器的学校系统管理平台上管理学生的数据,监控机房服务器的状态并将结果以图形化的形式展现出来等等。

在早期,没有Web框架的时候,我们是如何创建Web应用的呢? 以使用Python CGI脚本显示数据库中最新添加的10件商品为例:

Content-Type.cgi

这个代码看起来不错,简单易懂,但实际有很多问题和不方便的地方,比如:

  • 网络应用底层的协议、线程、进程如何处理?
  • 如果应用中有多处需要连接数据库会怎样呢?我们会有很多CGI脚本,每个脚本都写一遍链接数据库的代码?
  • 前端、后端工程师以及数据库管理员集于一身,无法分工配合。设想一个前端设计师,完全没有Python开发经验,但是又需要编写SQL语句的话,会发生什么呢?
  • 如果代码被重用到一个复杂的环境中会发生什么?
  • 直接将数据库的密码写在代码里吗?
  • 今天是取十个商品,明天我要删除十个商品怎么办?

以上的问题是显而易见的,聪明的程序员在不断地遇到问题和解决问题,探索方案和实践方案中,重复了下面的过程:

  1. 开始编写第一个Web应用,经过大量地摸索和踩坑,完成了工作。
  2. 开始编写新的Web应用
  3. 从第一步中总结经验(找出其中通用的代码),并运用在第二步中
  4. 重构代码使得能在第二个应用中使用第一个程序中的通用代码
  5. 重复2-4步若干次
  6. 发明了一个Web框架。

最初的Web开发框架就是这么来的!

Web框架致力于解决一些共同的问题,为Web应用提供通用的架构,让用户专注于网站应用业务逻辑的开发,而无须处理网络应用底层的协议、线程、进程等方面的问题,从而大大提高开发者的效率和Web应用程序的质量。

一般Web框架的架构是这样的:

大多数基于Python的web框架,如Django、Tornado、Flask、Webpy都是在这个范围内进行增删裁剪。例如Tornado用的是自己的异步非阻塞“WSGI”网关接口,Flask则只提供了最精简和基本的框架,Django则是直接使用了现成的WSGI,并实现了大部分功能,提供了大量的应用工具。

Django

Django是一个由Python编写的具有完整架站能力的开源Web框架。使用Django,只要很少的代码,开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的Web服务。

MVC
Django Reinhardt
Lawrence Journal-WorldAdrian HolovatySimon WillisonWorld Online
World OnlineJacob Kaplan-MossWorld Online

Django具有以下特点:

  • Django是一个全栈Web框架。所谓全栈框架,是指除了封装网络和线程操作,还提供HTTP请求和响应、数据库读写管理、HTML模板渲染等一系列功能的框架。你可以不太准确地理解为全栈工程师包办了前后端和数据库访问的所有开发工作,整个网站都是一个人搭建的。
  • 功能完善、要素齐全。该有的、可以没有的都有,常用的、不常用的工具都提供。Django提供了大量的特性和工具,无须你自己定义、组合、增删及修改。但是,在有些人眼里这被认为是臃肿不够灵活,发挥不了程序员的能动性。(一体机和DIY你更喜欢哪个?^-^)
  • 完善的文档。经过长期的发展和完善,Django有广泛的实践经验和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。
  • 强大的数据库访问API。Django的Model层自带数据库ORM组件,开发者无须学习其他数据库访问技术(例如SQLALchemy)。当然你也可以使用SQLALchemy,甚至不适用ORM组件。
  • 灵活的路由系统。Django具备路由转发、正则表达式、命名空间、URL反向解析等功能。
  • 丰富的Template模板功能:Django自带类似jinjia的模板语言,不但原生功能丰富,还可以自定义模板标签和过滤器。并且以类似Python的调用机制和视图默契配合。
  • 自带后台管理应用admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。这是Django最受欢迎的功能。
  • 完整的错误信息提示:在开发调试过程中如果出现运行错误或者异常,Django可以提供非常完整的错误信息帮助定位问题。

MVC及MTV设计模式:

在目前基于Python语言的几十个Web开发框架中,几乎所有的全栈框架都强制或引导开发者使用MVC设计模式。

MVC设计模式:

Trygve TeenskaugMVC

模型(Model):用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑的部分,Model只提供功能性的接口,通过这些接口可以获取Model的所有功能。白话说,这个模块就是业务逻辑和数据库的交互层,定义了数据表。

视图(View):负责数据的显示和呈现,是对用户的直接输出。

控制器(Controller):负责从用户端收集用户的输入,可以看成提供View的反向功能。

这三个部分互相独立,但又相互联系,使得改进和升级界面及用户交互流程,在Web开发过程任务分配时,不需要重写业务逻辑及数据访问代码。

MVC在Python之外的语言中也有广泛应用,例如VC++的MFC,Java的Structs及Spring、C#的.NET开发框架,都非常有名。

MTV设计模式:

MTV和MVC本质上是一样的。

Django对传统的MVC设计模式进行了修改,将视图分成View模块和Template模块两部分,将动态的逻辑处理与静态的页面展示分离开。而Model采用了ORM技术,将关系型数据库表抽象成面向对象的Python类,将数据库的表操作转换成Python的类操作,避免了编写复杂的SQL语句。

模型(Model):和MVC中的定义一样

模板(Template):将模型数据与HTML页面结合起来的引擎

视图(View):负责实际的业务逻辑实现

Django的MTV模型组织可参考下图所示:

评论总数: 16