Django是一个网络开发框架,有了这个框架,能是网站开发更高效有趣,能轻松的创建和维护高质量的网站应用。

这一本书的目的是使读者成为一个Django的专家。主要着重两点。第一,深入的解释Django做了什么和用Django怎么去创建网页应用。第二,在更高的概念层次中适量的回答一下“在我的项目中,怎么用这个工具更高效” 这个问题。通过阅读这本书,你将会快速的学习到开发一个强大的网站的技能。

什么是网络框架(Web Framework)?

Django是新一代网络框架中杰出的一份子 - 但是这究竟代表这什么?

为了回答这个问题,我们先不用任何的框架,用Python语言来设计一个网络应用。用没有任何捷径的方式来展示原始的工作方式是怎样的,这样就能理解为什么说Django框架这么高效。(事实上,知道原始的工作方式很有意义,因为框架不是总能起得到作用。并且更重要的是,知道为什么是这样工作的能让你成为一个更好的网络开发者。)

一个最简单最直接的创建Python web app的方法是用Common Gateway Interface(CGI)。下面是解释下它是如何工作的: 就是写一个Python脚本,这个脚本能生成HTML,然后这个脚本以“.cgi”的后缀保存在web服务器中,而用Web browser来访问页面。

下面是一个Python CGI脚本的例子,这个例子是:从数据库中取出最近出版的十本书的数据,展示到网页上。不要在意语法细节,只要随意感受一下这个脚本做了哪些事情。

#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html\n"
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断开数据库连接。

单从这个脚本来看,这种方式也没有多糟。至少一件事情是确定的,这段代码很容易理解---即使对于一个初学的开发者来说能够完全读懂这段代码。这里没有什么可学,也没有什么其他的代码可读。另外,它也很容易部署:只要将文件保存成“.cgi”后缀,然后上传到web server中去,最后用浏览器访问这个文件。

虽然这些都很简单,但是,这种方式有一些问题和让人烦恼的地方。尝试问问自己下面几个问题:

1.当你的应用中有多个地方需要连接数据库怎么办? 显然数据库连接的代码不应该被重复的复写在每个CGI脚本里面。最实用的办法应该是数据库连接的代码抽出来,写成一个可以共享的方法。

2.一个开发者真的需要关心打印出“Content-Type”行或者是记得关闭数据库的连接这类的事情吗?这类的事情降低了程序员的生产效率而且提高了错误出现的几率。这些将HTML和Python代码组合和拆卸的任务最好由一个基本框架来解决。

3.当这段代码在多个环境中都被复用,且每个环境都有独立的数据库和不同的密码会怎么样?在这一点上,一些针对特殊环境的配置就变得很有必要了。

4.当一个页面设计者没有Python的编程经验当却想要重新设计页面怎么办?一个错误的字符,就可能引起整个应用当掉。所以,理想的逻辑应该是:从数据库检索书名 和 用HTML来显示这些书名 两个工作应该分开。这样,Python的编程和HTML的设计可以分开写,且互不影响。

网络架构试图解决这些问题。一个网络框架为你的应用提供了一个编程基础设施,在这个基础上你可以不用担心以上问题,而更加专注在写出整洁可维护性的代码。 总而言之,这就是Django做的事情。

第一章 介绍Django的更多相关文章

  1. Gradle2.0用户指南翻译——第一章. 介绍

    翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...

  2. 第一章、Django概述

    目录 第一章.Django概述 一.了解软件开发架构 二.HTTP协议 三.响应状态码 四.请求方式 五.基于wsgiref模块 六..动静态网页 七.python三大主流web框架 八.安装Djan ...

  3. Akka in action (第一章 介绍Akka)

    在本章 概述Akka 了解Actors和Actor系统 Akka的适用范围 在第一章中,会介绍给你Akk的个方面,它能做什么,与现有的解决方案有那些不同.重点关注Akka有哪些功能和使用范围和强大的并 ...

  4. Django2.0入门:第一章、Django是啥

    Django介绍 缘起 随着Python语言的兴起,越来越多的程序员开始转向这门语言的学习.在我们学习完Python基础之后,就可以选择利用Python这门语言进行Web应用开发.而众多Python ...

  5. (转)Django学习之 第一章:Django介绍

    Django: Python编程Web框架 如果你上djangoproject.com你会发现对Django的如下解释: “Django is a high-level Python Web fram ...

  6. IOS开发之控件篇UITabBarControllor第一章 - 介绍

    UITabBarControllor的基本样子 官方有个图介绍这个TabBar的结构,我们先来看看这个结构图 --------------------------------------------- ...

  7. Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest?

    原始链接:Introduction: Why Google C++ Testing Framework? 词汇表 版本号:v_0.1 介绍:为什么使用GTest? GTest帮助你写更好的C++测试代 ...

  8. IOS开发之控件篇UINavigationController第一章 - 介绍

    UINavigationController是一个比较常见的控件,它连接个视图,例如一个视图走到另外一个视图,之间的联系都可以用这个NavigationController的方法 一般都会由两个部分组 ...

  9. kubernetes第一章--介绍

随机推荐

  1. springboot定时任务,去掉指定日期

    今天用springboot写到一个需求:每周定时发送任务,但是要避开法定节假日. 网上找了些博客看,主要参考了https://www.cnblogs.com/lic309/p/4089633.html ...

  2. 查找CPU使用率过高的线程

    1.在编写程序中有时候设置不恰当,休眠时间不够,一般情况下4核的电脑CPU使用率一直大于23%,8核的大于13%就有可能是这种情况 解决方法: 在VS查看并行线程利用CPU使用工具ProcessExp ...

  3. springmvc4集成swagger2

    首先在原有的springmvc工程的pom文件中增加swagger <dependency> <groupId>io.springfox</groupId> < ...

  4. PD虚拟机修改RemixOS的屏幕分辨率

    PD虚拟机修改RemixOS的屏幕分辨率 2017年12月02日02:13:55 by SemiconductorKING 最近要用个移动端APP,手机不方便就想在电脑跑一个,然后装了个以前用过的觉得 ...

  5. Full postback triggered by LinkButton inside GridView inside UpdatePanel

    GridView inside of a UpdatePanel,get the button to trigger a partial postback <asp:ScriptManager ...

  6. mysql主从复制测试

    mysql主从复制测试: 1. 配置主服务器:在主库上面添加复制账号GRANT REPLICATION SLAVE on *.* to 'mark'@'%' identified by 'mark' ...

  7. SQL语句整理(一) 数据库查询语言DQL

    前言: 这是我学数据库时整理的学习资料,基本上包括了所以的SQL语句的知识点. 我的教材是人大王珊老师的<数据库系统概论>. 因为是手打的,所以会用一些细节打错了,但都挺明显也不多(考完试 ...

  8. 基于bootstrap的图片轮播功能

    插入js及css支持: <link rel="stylesheet" href="css/bootstrap.min.css"/> <scri ...

  9. sharepint 2013 添加subsite

    在用服务器端对象模型往里面添加subsite的时候,照着书上的代码,结果,失败.报错 not suported language. bing了半天,说是语言未支持,又是修改系统区域,显示语言等,还是失 ...

  10. C Primer Plus note6

    error: invalid preprocessing directive #difine| 无效的宏定义处理 宏定义define 写成了 difine.