第一章 介绍Django
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的更多相关文章
- Gradle2.0用户指南翻译——第一章. 介绍
翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...
- 第一章、Django概述
目录 第一章.Django概述 一.了解软件开发架构 二.HTTP协议 三.响应状态码 四.请求方式 五.基于wsgiref模块 六..动静态网页 七.python三大主流web框架 八.安装Djan ...
- Akka in action (第一章 介绍Akka)
在本章 概述Akka 了解Actors和Actor系统 Akka的适用范围 在第一章中,会介绍给你Akk的个方面,它能做什么,与现有的解决方案有那些不同.重点关注Akka有哪些功能和使用范围和强大的并 ...
- Django2.0入门:第一章、Django是啥
Django介绍 缘起 随着Python语言的兴起,越来越多的程序员开始转向这门语言的学习.在我们学习完Python基础之后,就可以选择利用Python这门语言进行Web应用开发.而众多Python ...
- (转)Django学习之 第一章:Django介绍
Django: Python编程Web框架 如果你上djangoproject.com你会发现对Django的如下解释: “Django is a high-level Python Web fram ...
- IOS开发之控件篇UITabBarControllor第一章 - 介绍
UITabBarControllor的基本样子 官方有个图介绍这个TabBar的结构,我们先来看看这个结构图 --------------------------------------------- ...
- Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest?
原始链接:Introduction: Why Google C++ Testing Framework? 词汇表 版本号:v_0.1 介绍:为什么使用GTest? GTest帮助你写更好的C++测试代 ...
- IOS开发之控件篇UINavigationController第一章 - 介绍
UINavigationController是一个比较常见的控件,它连接个视图,例如一个视图走到另外一个视图,之间的联系都可以用这个NavigationController的方法 一般都会由两个部分组 ...
- kubernetes第一章--介绍
随机推荐
- mysql启动登陆
mysql.server start # 1. 启动 mysql.server stop # 2. 停止 mysql.server restart # 3. 重启 1.本地登陆 sud ...
- PHP读取配置文件连接MySQL数据库
读取配置文件方法parse_ini_file($filepath [,$section]) 代码: conn.php <?php //连接数据库 //$conn =new mysqli('loc ...
- Cheatsheet: 2017 03.01 ~ 03.31
Web New Year, New Blog Day 10 - Using JetBrains Rider with a .NET Core Console Application JavaScrip ...
- Spring boot Mybatis 整合(注解版)
之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...
- shiro,基于springboot,基于前后端分离,从登录认证到鉴权,从入门到放弃
这个demo是基于springboot项目的. 名词介绍: ShiroShiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject. SecurityManager. Re ...
- idea快捷键、常用设置
代码提示: code completion :ALT + / 选用Eclipse的keymap. 设置代码助手快捷键(keymap-basic) 代码上下行复制(Ctrl + Alt + Down ...
- Alice's Print Service
Alice's Print Service Time Limit: 2 Seconds Memory Limit: 65536 KB Alice is providing print ser ...
- https、公钥、私钥白话解说
原文 摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表HTTPS的真实设计过程.在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于“还 ...
- HTML语言中img标签的alt属性和title属性的作用与区别
alt属性是在你的图片因为某种原因不能加载时在页面显示的提示信息,它会直接输出在原本加载图片的地方,而title属性是在你鼠标悬停在该图片上时显示一个小提示,鼠标离开就没有了,有点类似jQuery的h ...
- thinkphp怎么把数据库中的列的值存到下拉框中
1. 先去数据库中查值,查询整个数据表,结果为二维数组. $project = M("project"); $cell = $project->where(array('st ...