第一章 介绍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第一章--介绍
随机推荐
- 公司管理系列--80% of Your Culture is Your Founder(FaceBook)
80% of Your Culture is Your Founder When Molly Graham joined Facebook in 2008, the company still ...
- 限流(四)nginx接入层限流
一.nginx限流模块 接入层指的是请求流量的入口,我们可以在这里做很多控制,比如:负载均衡,缓存,限流等. nginx中针对限流有两个模块可以处理: 1)ngx_http_limit_req_mod ...
- tomcat开启远程调试和热部署(jrebel)启动tomcat
@echo off set REBEL_HOME=D:\jrebel\jrebel--nosetup set JAVA_OPTS=-agentpath:%REBEL_HOME%\lib\jrebel6 ...
- 为My97DatePicker日期插件设置默认日期
datepicker.zip 为My97DatePicker日期插件设置默认日期,开始日期为系统日期的前一个月,结束日期为系统日期: 开始日期不能大于结束日期,且都不能大于今天: 开始日期-maxDa ...
- 解决Openwrt安装插件提示一下错误的办法
解决Openwrt安装插件提示一下错误的办法 Openwrt安装17ce插件,提示一下错误: Collected errors: * check_data_file_clashes: Package ...
- Django 模型层之单表操作
一.单表操作之创建表 在app的models.py文件中创建模型: from django.db import models class Book(models.Model): id = models ...
- Mysql与web之间的数据、查询等个问题
Mysql与web之间的数据.查询等个问题 在自己写的一个jsp主页连接数据库出现的各种问题,写记下来与大家分享,共勉.最后附jdbc代码. ---DanlV Error 1---错误代码: java ...
- OpenLayers介绍和第一个例子(转载)
什么是OpenLayers? 作者:田念明出处:http://www.cnblogs.com/nianming/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位 ...
- Android常用的图片加载库
Android常用的图片加载库 前言:图片加载涉及到图片的缓存.图片的处理.图片的显示等.四种常用的图片加载框架,分别是Fresco.ImageLoader. Picasso. Glide. Uni ...
- js 显示 base64编码 的二进制流 图片
Data URI scheme.Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入.比如上面那串字符,其实是一张小图片,将这些字 ...