Django 是新一代 Web 框架 中非常出色的成员。那么 Web 框架这个术语的确切含义到底是 什么呢?

  要回答这个问题,让我们来看看通过编写标准的 CGI 程序来开发 Web 应用,这在大约1998年的时候非常流行。编写 CGI Web 应用时,你需要自己处理所有的操作,就像你想烤面包,但是都需要自己生火一样。下面是实例,一个简单的 CGI 脚本,用 Python 写的,读取数据库并显示最新发布的十本书。

 #!/usr/bin/python 

 import MySQLdb 

 print "Content-Type: text/html"
print "<html><head><title>Books</title></head>"
print "<body>"
print "<h1>Books</h1>"
print "<ul>" connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')
cursor = connection.cursor()
cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")
for row in cursor.fetchall():
print "<li>%s</li>" % row[0] print "</ul>"
print "</body></html>" connection.close()

代码十分简单。首先,根据 CGI 的要求输出一行 Content-Type,接下来是一个空行。再接下来是一些 HTML 的起始标签,然后连接数据库并执行一些查询操作,获取最新的十本书。遍历这些书,同时生成一个 HTML 的无序序列。最后,输出 HTML 的结束标签并且关闭数据库连接。
  像这样的一次性的动态页面,从头写起的方法并非一定不好。其中一点:这些代码简单易懂,就算是一个初起步的 开发者都能读明白这16行的 Python 代码,而且这些代码从头到尾做了什么都能了解得一清二楚。不需要学习额外的背景知识,没有额外的代码需要去了解。同样,也易于部署这16行代码,只需要将它保存为一个 latestbooks.cgi 的文件,上传到 Web 服务器上,通过浏览器访问即可。
  但是,一个 Web 应用要远复杂于以上情况,这种方法很快会失效,而且你将会要面对很多问 题:

  • 当多个动态页面需要同时连接数据库时,将会发生什么?当然,连接数据库的代码不应该同时存在于各个独立的 CGI 脚本中,所以最踏实的做法是把这些代码重新组织到一个公共函数里面。
  • 一个开发人员确实需要去关注如何输出 Content-Type 以及完成所有操作后去关闭数据库么?此类问题只会降低开发人员的工作效率,增加犯错误的几率。那些初始化和释放相关的工作应该交给一些通用的框架来完成。
  • 如果这样的代码被重用到一个复合的环境中会发生什么?每个页面都分别对应独立的数据库和密码吗?从这点看来,就需要一些环境相关的配置文件。
  • 如果一个 Web 设计师,完全没有 Python 开发经验,但是又需要重新设计页面的话,又将发生什么呢?理想的情况是,页面显示的逻辑与从数据库中读取书本记录分隔开,这样 Web 设计师的重新设计不会影响到之前的业务逻辑。

  以上正是 Web 框架致力于解决的问题。Web 框架为应用程序提供了一套程序框架,这样你可以专注于编写清晰、易维护的代码,而无需从头做起。简单来说,这就是 Django 所能做的。

原文:《The Django Book》 http://djangobook.py3k.cn/

第一章 Django之web框架(1)的更多相关文章

  1. 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述

    微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...

  2. Web框架本质及第一个Django实例 Web框架

    Web框架本质及第一个Django实例   Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web ...

  3. Django学习---Web框架及基础知识

    Django学习---Web框架 web框架的本质 我们在学socket,我们创建一个socketserver,然后运行起来,有一个client客户端要连接socket服务端,连接上之后,如果两边都没 ...

  4. Django之web框架和url路由

    一.web框架 1.什么是web框架 Web框架是用来进行Web应用开发的一个软件架构,开发者在基于Web框架实现自己的业务逻辑.Web应用本质上就是一个socket服务端,而用户的浏览器就是一个so ...

  5. django基础(web框架,http协议,django安装)

    学习Django之前我们先来看什么是OSI七层模型: 应用层 表示层       应用层(五层模型中把这三层合成一个应用层) http协议 会话层 传输层                  提供端口对 ...

  6. 第一章 Django之MVC模式(2)

    让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过 Web 框架来实现的功能与之前的方式有何不同.下面就是通过使用 Django 来完成以上功能的例子: # models.py (the da ...

  7. 《Entity Framework 6 Recipes》翻译系列(2) -----第一章 开始使用实体框架之使用介绍

    Visual Studio 我们在Windows平台上开发应用程序使用的工具主要是Visual Studio.这个集成开发环境已经演化了很多年,从一个简单的C++编辑器和编译器到一个高度集成.支持软件 ...

  8. Django: 之Web框架完美解析

    Web框架解析 Web通过Socket来监听客户端,,一旦发现客户发送的信息立刻接受.接受之后在服务端查找客户的请求,找到请求返回给用户,断开.这是一个连接,不断的接收,不断的返回. #!/usr/b ...

  9. $Django 等web框架,交互,基础入门

    1 web 应用2 c/s 和bs架构3 python中的web框架    a :socket    b:路由跟视图函数匹配关系    c:模板渲染 django: uwsgi/wsgiref    ...

随机推荐

  1. mysql一条语句实现插入或更新的操作

    ,),(,) ON DUPLICATE KEY UPDATE c=VALUES(c); 或者 INSERT INTO table (id,a,b,c) select id,a,b,c from xxx ...

  2. Spring Cloud(5):服务路由(Zuul)

    Zuul简介 所有微服务之间的调用,都应该通过服务网关进行路由,服务网关充当服务与服务之间的中介.服务网关像交通警察一样指挥交通,将用户引导到目标微服务实例.服务网关还充当着应用程序内所有微服务调用的 ...

  3. paramiko实现putty功能

    paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. context:python3.5 执行命令 1.基于用户名和密码方 ...

  4. zabbix案例实例

    1 案例1:实现Zabbix报警功能 1.1 问题 沿用第5天Zabbix练习,使用Zabbix实现报警功能,实现以下目标: 监控Linux服务器系统账户 创建Media,设置邮件服务器及收件人邮箱 ...

  5. 在Ubuntu里搭建spark环境

    注意:1.搭建环境:Ubuntu64位,Linux(也有Windows的,我还没空试)       2.一般的配置jdk.Scala等的路径环境是在/etc/profile里配置的,我自己搭建的时候发 ...

  6. linux基础命令笔记

    配置IP地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0 忘记root密码grub e 选择kernel按e 输入single b 1:目录及文件的基本操 ...

  7. [LuoguP2159][SHOI2009]舞会_动态规划_高精度_排列组合

    舞会 题目链接:https://www.luogu.org/problem/P2159 数据范围:略. 题解: 不会.... 看了题解觉得自己好傻逼啊

  8. html中'disabled'与'readonly'的区别

    html中'disabled'与'readonly'的区别 此随笔增量编辑 disabled 在提交表单的时候 值不会带入表单中, 而readonly则可以将值带入表单中.

  9. Python 【Debug排除程序故障】

    debug #排除程序故障 print()函数常和#号注释结合在一起用来debug 多行注释有两种快捷操作:1.在需要注释的多行代码块前后加一组三引号''' 2.选中代码后使用快捷键操作:Window ...

  10. 第十二章 ZYNQ-MIZ701 PL中断请求

      本篇文章主要介绍外设(PL)产生的中断请求,在PS端进行处理. 在PL端通过按键产生中断,PS接受到之后点亮相应的LED. 本文所使用的开发板是Miz701 PC 开发环境版本:Vivado 20 ...