第一章 介绍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第一章--介绍
随机推荐
- 计算F1Score
计算F1Score predictions = pval < epsilon fp = sum((predictions == 1) & (y == 0)) fn = sum((pred ...
- Appium移动端自动化测试-安卓真机+模拟器启动
一.环境准备 appium-pythin-client版本(0.17),selenium版本(2.53.6)(版本需对应,否则执行脚本可能出错,我用的是这两个版本) macOs版本10.14.1(ap ...
- 阿里云服务器docker搞定镜像
docker的安装可以看前面的文章 这里我的docker已经安装完成了,该搞镜像了:这里的镜像用的是我以前自己搞的,虽然镜像有点大,但是胜在自己搞的,熟悉(熟悉不熟悉鬼知道) 我的镜像放在了阿里云容器 ...
- json数据发送时浏览器提示“保存”解决
数据以json形式发送的时候,部分浏览器不能直接解析,而是提示是否保存,nodejs的express应用中可以通过如下代码解决该问题: router.get('/', function (req, r ...
- Windows操作系统----锁住命令行窗口
第一步: 新建一个.txt文档,输入如下内容: @echo off echo. setlocal :checkpassword set /p password=请输入密码: if "%pas ...
- Python爬虫编程常见问题解决方法
Python爬虫编程常见问题解决方法: 1.通用的解决方案: [按住Ctrl键不送松],同时用鼠标点击[方法名],查看文档 2.TypeError: POST data should be bytes ...
- Qt 之模型/视图(自定义按钮)
https://blog.csdn.net/liang19890820/article/details/50974059 简述 衍伸前面的章节,我们对QTableView实现了数据显示.自定义排序.显 ...
- Visual Studio Code调试electron主进程
Visual Studio Code调试electron主进程 作者: jekkay 分类: electron 发布时间: 2017-06-11 14:56 一·概述 此文原出自[水滴石]: htt ...
- chrome 插件开发学习
http://blog.csdn.net/my_business/article/details/7711525
- PHP 如何实现网址伪静态
Apache的 mod_rewrite是比较强大的,在进行网站建设时,可以通过这个模块来实现伪静态. 主要步骤如下: 1.检测Apache是否开启mod_rewrite功能 可以通过php提供 ...