Python web框架Django(一)

?

第一章:介绍Django

本书所讲的是Django:一个可以使Web开发工作愉快并且高效的Web开发框架。 使用Django,使你能够以最小的代价构建和维护高质量的Web应用。

从好的方面来看,Web 开发激动人心且富于创造性;从另一面来看,它却是份繁琐而令人生厌的工作。 通过减少重复的代码,Django 使你能够专注于 Web 应用上有 趣的关键性的东西。 为了达到这个目标,Django 提供了通用Web开发模式的高度抽象,提供了频繁进行的编程作业的快速解决方法,以及为"如何解决问题"提供了清晰明了的约定。 同时,Django 尝试留下一些方法,来让你根据需要在framework之外来开发。

本书的目的是将你培养成Django专家。 主要侧重于两方面: 第一,我们深度解释 Django 到底做了哪些工作以及如何用她构建Web应用;第二,我们将会在适当的地方讨论更高级的概念,并解释如何 在自己的项目中高效的使用这些工具。 通过阅读此书,你将学会快速开发功能强大网站的技巧,并且你的代码将会十分 清晰,易于维护。 本书的代码清晰,易维护,通过学习,可以快速开发功能强大的网站。

框架是什麼?

Django 在新一代的?Web框架?中非常出色,为什么这么说呢?

为回答该问题,让我们考虑一下不使用框架设计 Python 网页应用程序的情形。 贯穿整本书,我们多次展示不使用框架实现网站基本功能的方法,让读者认识到框架开发的方便。 (不使用框架,更多情况是没有合适的框架可用。 最重要的是,理解实现的来龙去脉会使你成为一个优秀的web开发者。)

使用Python开发Web,最简单,原始和直接的办法是使用CGI标准,在1998年这种方式很流行。 现在从应用角度解释它是如何工作: 首先做一个Python脚本,输出HTML代码,然后保存成.cgi扩展名的文件,通过浏览器访问此文件。 就是这样。

如下示例,用Python CGI脚本显示数据库中最新出版的10本书: 不用关心语法细节;仅仅感觉一下基本实现的方法:

#!/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的结束标签并且关闭数据库连接。

像这样的一次性的动态页面,从头写起的方法并非一定不好。 其中一点: 这些代码简单易懂,就算是一个初起步的 开发者都能读明白这16行的Python的代码,而且这些代码从头到尾做了什么都能了解得一清二楚。 不需要学习额外 的背景知识,没有额外的代码需要去了解。 同样,也易于部署这16行代码,只需要将它保存为一个latestbooks.cgi?的 文件,上传到网络服务器上,通过浏览器访问即可。

尽管实现很简单,还是暴露了一些问题和不便的地方。 问你自己这几个问题:

  • 应用中有多处需要连接数据库会怎样呢? 每个独立的CGI脚本,不应该重复写数据库连接的代码。 比较实用的办法是写一个共享函数,可被多个代码调用。
  • 一个开发人员?确实?需要去关注如何输出Content-Type以及完成所有操作后去关闭数据 库么? 此类问题只会降低开发人员的工作效率,增加犯错误的几率。 那些初始化和释放 相关的工作应该交给一些通用的框架来完成。
  • 如果这样的代码被重用到一个复合的环境中会发生什么? 每个页面都分别对应独立的数据库和密码吗?
  • 如果一个Web设计师,完全没有Python开发经验,但是又需要重新设计页面的话,又将 发生什么呢? 一个字符写错了,可能导致整个应用崩溃。 理想的情况是,页面显示的逻辑与从数据库中读取书本记录分隔开,这样 Web设计师的重新设计不会影响到之前的业务逻辑。

    以上正是Web框架致力于解决的问题。 Web框架为应用程序提供了一套程序框架, 这样你可以专注于编写清晰、易维护的代码,而无需从头做起。 简单来说,这就是Django所能做的。

    MVC 设计模式

    让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过Web框架来实现的功能与之前的方式有何不同。 下面就是通过使用Django来完成以上功能的例子: 首先,我们分成4个Python的文件,(models.py?,views.py?,?urls.py?) 和html模板文件 (latest_books.html?)

    # models.py (the database tables)

    ?

    from django.db import models

    ?

    class Book(models.Model):

    name = models.CharField(max_length=50)

    pub_date = models.DateField()

    ?

    ?

    # views.py (the business logic)

    ?

    from django.shortcuts import render_to_response

    from models import Book

    ?

    def latest_books(request):

    book_list = Book.objects.order_by(‘-pub_date‘)[:10]

    return render_to_response(‘latest_books.html‘, {‘book_list‘: book_list})

    ?

    ?

    # urls.py (the URL configuration)

    ?

    from django.conf.urls.defaults import *

    import views

    ?

    urlpatterns = patterns(‘‘,

    (r‘^latest/$‘, views.latest_books),

    )

    ?

    ?

    # latest_books.html (the template)

    ?

    <html><head><title>Books</title></head>

    <body>

    <h1>Books</h1>

    <ul>

    {% for book in book_list %}

    <li>{{ book.name }}</li>

    {% endfor %}

    </ul>

    </body></html>

    然后,不用关心语法细节;只要用心感觉整体的设计。 这里只关注分割后的几个文件:

  • models.py?文件主要用一个 Python 类来描述数据表。 称为?模型(model)?。 运用这个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。
  • views.py文件包含了页面的业务逻辑。?latest_books()函数叫做视图
  • urls.py?指出了什么样的 URL 调用什么的视图。 在这个例子中?/latest/?URL 将会调用?latest_books()这个函数。 换句话说,如果你的域名是example.com,任何人浏览网址http://example.com/latest/将会调用latest_books()这个函数。
  • latest_books.html?是 html 模板,它描述了这个页面的设计是如何的。 使用带基本逻辑声明的模板语言,如{%?for?book?in?book_list?%}

    结合起来,这些部分松散遵循的模式称为模型-视图-控制器(MVC)。 简单的说, MVC 是一种软件开发的方法,它把代码的定义和数据访问的方法(模型)与请求逻辑 (控制器)还有用户接口(视图)分开来。 我们将在第5章更深入地讨论MVC。

    这种设计模式关键的优势在于各种组件都是?松散结合?的。这样,每个由 Django驱动 的Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。 比如,开发者 更改一个应用程序中的 URL 而不用影响到这个程序底层的实现。 设计师可以改变 HTML 页面 的样式而不用接触 Python 代码。 数据库管理员可以重新命名数据表并且只需更改一个地方,无需从一大堆文件中进行查找和替换。

    本书中,每个组件都有它自己的一个章节。 比如,第三章涵盖了视图,第四章是模板, 而第五章是模型。

    Django 历史

    在我们讨论代码之前我们需要先了解一下 Django 的历史。 从上面我们注意到:我们将向你展示如何不使用捷径来完成工作,以便能更好的理解捷径的原理 同样,理解Django产生的背景,历史有助于理解Django的实现方式。

    如果你曾编写过网络应用程序。 那么你很有可能熟悉之前我们的 CGI 例子。

  1. 从头开始编写网络应用程序。
  2. 从头编写另一个网络应用程序。
  3. 从第一步中总结(找出其中通用的代码),并运用在第二步中。
  4. 重构代码使得能在第 2 个程序中使用第 1 个程序中的通用代码。
  5. 重复 2-4 步骤若干次。
  6. 意识到你发明了一个框架。

    这正是为什么 Django 建立的原因!

    Django 是从真实世界的应用中成长起来的,它是由 堪萨斯(Kansas)州 Lawrence 城中的一个 网络开发小组编写的。 它诞生于 2003 年秋天,那时?Lawrence Journal-World?报纸的 程序员 Adrian Holovaty 和 Simon Willison 开始用 Python 来编写程序。

    当时他们的 World Online 小组制作并维护当地的几个新闻站点, 并在以新闻界特有的快节奏开发环境中逐渐发展。 这些站点包括有 LJWorld.com、Lawrence.com 和 KUsports.com, 记者(或管理层) 要求增加的特征或整个程序都能在计划时间内快速的被建立,这些时间通常只有几天 或几个小时。 因此,Adrian 和 Simon 开发了一种节省时间的网络程序开发框架, 这是在截止时间前能完成程序的唯一途径。

    2005 年的夏天,当这个框架开发完成时,它已经用来制作了很多个 World Online 的站点。 当时 World Online 小组中的 Jacob Kaplan-Moss 决定把这个框架发布为一个开源软件。

    从今往后数年,Django是一个有着数以万计的用户和贡献者,在世界广泛传播的完善开源项目。 原来的World Online的两个开发者(Adrian and Jacob)仍然掌握着Django,但是其发展方向受社区团队的影响更大。

    这些历史都是相关联的,因为她们帮助解释了很重要的两点。 第一,Django最可爱的地方。 Django诞生于新闻网站的环境中,因此它提供很多了特性(如第6章会说到的管理后台),非常适合内容类的网站,如Amazon.com, craigslist.org和washingtonpost.com,这些网站提供动态的,数据库驱动的信息。 (不要看到这就感到沮丧,尽管Django擅长于动态内容管理系统, 但并不表示Django主要的目的就是用来创建动态内容的网站。 某些方面 * 特别高效* 与其他方面 * 不高效* 是有区别的, Django在其他方面也同样高效。)

    第二,Django的起源造就了它的开源社区的文化。 因为Django来自于真实世界中的代码,而不是 来自于一个科研项目或者商业产品,她主要集中力量来解决Web开发中遇到的问题,同样 也是Django的开发者经常遇到的问题。 这样,Django每天在现有的基础上进步。 框架的开发者对于让开发人员节省时间,编写更加容易维护的程序,同时保证程序运行的效率具有极大的兴趣。 无他,开发者动力来源于自己的目标:节省时间,快乐工作。 (坦率地讲,他们使用了自己公司的产品。)

    如何阅读本书

    在编写本书时,我们努力尝试在可读性和参考性间做一个平衡,当然本书会偏向于可 读性。 本书的目标,之前也提过,是要将你培养成一名Django专家,我们相信,最好 的方式就是提供文章和充足的实例,而不是一堆详尽却乏味的关于Django特色的手册。 (曾经有人说过,如果仅仅教字母表是无法教会别人说话的。

    按照这种思路,我们推荐按顺序阅读第 1-12 章。 这些章节构成了如何使用 Django 的基础;读过之后,你就可以搭建由 Django 支撑的网站了。 1-7章是核心课程,8-11章讲述Django的高级应用,12章讲述部署相关的知识。 剩下的13-20章,讲述Django特有的特点,可以任意顺序阅读。

    附录部分用作参考资料。 要回忆语法或查阅 Django 某部分的功能概要时,你偶尔可能会回来翻翻这些资料以及?http://www.djangoproject.com/?上的免费文档。

    所需编程知识

    本书读者需要理解基本的面向过程和面向对象编程: 流程控制(?if?,?while?和?for?),数据结构(列表,哈希表/字典),变量,类和对象。

    Web开发经验,正如你所想的,也是非常有帮助的,但是对于阅读本书,并不是必须的。 通过本书,我们尽量给缺乏经验的开发人员提供在Web开发中最好的实践。

    Python所需知识

    本质上来说, Django 只不过是用 Python 编写的一组类库。 用 Django 开发站点就是使用这些类库编写 Python 代码。 因此,学习 Django 的关键就是学习如何进行 Python 编程并理解 Django 类库的运作方式。

    如果你有Python开发经验,在学习过程中应该不会有任何问题。 基本上,Django的代码并 没有使用一些黑色魔法(例如代码中的花哨技巧,某个实现解释或者理解起来十分困难)。 对你来说,学习Django就是学习她的命名规则和API。

    如果你没有使用 Python 编程的经验,你一定会学到很多东西。 它是非常易学易用的。 虽然这本书没有包括一个完整的 Python 教程, 但也算是一个恰当的介绍了 Python特征和 功能的集锦。 当然,我们推荐你读一下官方的 Python 教程,它可 以从?http://docs.python.org/tut/?在线获得。 另外我们也推荐 Mark Pilgrims的 书Dive Into Python?(?http://www.diveintopython.org/?)

    Django版本支持

    此书内容对Django 1.1兼容。

    Django的开发者保证主要版本号向后兼容。 这意味着,你用Django 1.1写的应用,可以用于1.2,1.3,1.9等所有以1开头的版本

    如果Django到了2.0,你的应用可能不再兼容,需要重写,但是,2.0是很遥远的事情。 对此,可以参考一下1.0的开发周期,整整3年的时间。 (这与Python语言的兼容策略非常像: 在python 2.0下写的代码可以在python 2.6下运行,但不一定能在python3.0下运行

    所以,此书覆盖1.1版本,可以使用很长时间。

    获取帮助

    Django的最大的益处是,有一群乐于助人的人在Django社区上。 你可以毫无约束的提各种 问题在上面,如:django的安装,app 设计,db 设计,发布。

  • Django邮件列表是很多Django用户提出问题、回答问题的地方。 可以通过http://www.djangoproject.com/r/django-users?来免费注册。
  • 如果Django用户遇到棘手的问题,希望得到及时地回复,可以使用Django IRC channel。 在Freenode IRC network加入#django

    下一章

    在?下一章,我们将开始使用Django,内容将包括安装和初始化配置。

时间: 2024-11-05 19:02:58

Python web框架Django(一)的相关文章

Python Web框架Django (二)

第二章:入门 由于现代Web开发环境由多个部件组成,安装Django需要几个步骤. 这一章,我们将演示如何安装框架以及一些依赖关系. 因为Django就是纯Python代码,它可以运行在任何Python可以运行的环境,甚至是手机上! 但是这章只提及Django安装的通用脚本. 我们假设你把它安装在桌面/笔记本电脑或服务器. 往后,在第12章,我们将讨论如何部署Django到一个生产站点. Python 安装 Django本身是纯Python编写的,所以安装框架的第一步是确保你已经安装了Pytho

Python Web框架Django (四)

第四章 模板 在前一章中,你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python 代码之中. def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html) 尽管这种技术便

python web框架 django 工程 创建 目录介绍

# 创建Django工程django-admin startproject [工程名称] 默认创建django 项目都会自带这些东西 django setting 配置文件 django可以配置缓存 连接数据库 做静态文件处理 找模板 django url 用户访问django程序 会从自己规则做匹配 一旦匹配成功 返回用户数据 没有匹配上不返回 django wsgi python有个自带的wsgi模块 可以写自定义web框架 用wsgi在内部创建socket对象就可以了 自己只写处理函数就可

Python Web 框架 Django

Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 Web 应用程序框架.使用 Django,我们在几分钟之内就可以创建高品质.易维护.数据库驱动的应用程序. Django 框架的核心组件有: 用于创建模型的对象关系映射 为最终用户设计的完美管理界面 一流的 URL 设计 设计者友好的模板语言 缓存系统

Python Web框架Django (三)

第三章 视图和URL配置 前一章中,我们解释了如何建立一个 Django 项目并启动 Django 开发服务器. 在这一章,你将会学到用Django创建动态网页的基本知识. 你的第一个基于Django的页面: Hello World 正如我们的第一个目标,创建一个网页,用来输出这个著名的示例信息: Hello world. 如果你曾经发布过Hello world页面,但是没有使用网页框架,只是简单的在hello.html文本文件中输入Hello World,然后上传到任意的一个网页服务器上. 注

python web框架 django工程的创建

安装 django pip3 install django pip install django 安装完后出现这两个文件 django-admin 用来创建文件夹 在script目录 执行这个命令 django-admin.exe startproject mysite 执行完后多了个mysite文件夹 里面的东西 进入mysite目录看看 文件夹创建完成代表django 程序已经创建好了 接下来把程序运行起来 程序就可以运行了 进入创建的项目文件夹 把django 程序运行起来 python

Python Web框架Tornado的异步处理代码示例

1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与另一个流行的Python web框架Django相比,tornado不提供操作数据库的ORM接口及严格的MVC开发模式,但可以提供基本的web server功能,故它是轻量级的:它借助non-blocking and event-driven的I/O模型(epoll或kqueue)实现了一套异步网络库,故它是高性能的. Tornado的轻量级+高性能特性使得它特别适用于提供web api的场合,

Python Web框架Tornado的异步处理代码演示样例

1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口及严格的MVC开发模式,但能够提供主要的web server功能.故它是轻量级的:它借助non-blocking and event-driven的I/O模型(epoll或kqueue)实现了一套异步网络库,故它是高性能的. Tornado的轻量级+高性能特性使得它特别适用于提供web api的场合

Python Web框架之Django初探(一)

Python Web框架之Django初探 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件.并于2005年7月在BSD许可证下发布.这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的. Django可以运行在Apache,Nginx上,也可以运行在支持WSGI,FastCGI的服务器上.支持多种数据