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

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

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

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

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

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

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

  1. #!/usr/bin/env python
  2.  
  3. import MySQLdb
  4.  
  5. print "Content-Type: text/html\n"
  6. print "<html><head><title>Books</title></head>"
  7. print "<body>"
  8. print "<h1>Books</h1>"
  9. print "<ul>"
  10.  
  11. connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')
  12. cursor = connection.cursor()
  13. cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")
  14.  
  15. for row in cursor.fetchall():
  16. print "<li>%s</li>" % row[0]
  17.  
  18. print "</ul>"
  19. print "</body></html>"
  20.  
  21. 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. mysql启动登陆

    mysql.server start    # 1. 启动 mysql.server stop     # 2. 停止 mysql.server restart  # 3. 重启 1.本地登陆 sud ...

  2. PHP读取配置文件连接MySQL数据库

    读取配置文件方法parse_ini_file($filepath [,$section]) 代码: conn.php <?php //连接数据库 //$conn =new mysqli('loc ...

  3. Cheatsheet: 2017 03.01 ~ 03.31

    Web New Year, New Blog Day 10 - Using JetBrains Rider with a .NET Core Console Application JavaScrip ...

  4. Spring boot Mybatis 整合(注解版)

    之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...

  5. shiro,基于springboot,基于前后端分离,从登录认证到鉴权,从入门到放弃

    这个demo是基于springboot项目的. 名词介绍: ShiroShiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject. SecurityManager. Re ...

  6. idea快捷键、常用设置

      代码提示: code completion :ALT + / 选用Eclipse的keymap. 设置代码助手快捷键(keymap-basic) 代码上下行复制(Ctrl + Alt + Down ...

  7. Alice's Print Service

    Alice's Print Service Time Limit: 2 Seconds      Memory Limit: 65536 KB Alice is providing print ser ...

  8. https、公钥、私钥白话解说

    原文 摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表HTTPS的真实设计过程.在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于“还 ...

  9. HTML语言中img标签的alt属性和title属性的作用与区别

    alt属性是在你的图片因为某种原因不能加载时在页面显示的提示信息,它会直接输出在原本加载图片的地方,而title属性是在你鼠标悬停在该图片上时显示一个小提示,鼠标离开就没有了,有点类似jQuery的h ...

  10. thinkphp怎么把数据库中的列的值存到下拉框中

    1. 先去数据库中查值,查询整个数据表,结果为二维数组. $project = M("project"); $cell = $project->where(array('st ...