QQ登录 - 设为首页 - 加入收藏 - 网站地图 木易瓶子屋!第一时间了解互联网开发技术新鲜事儿!

亲!来点一下试试嘛。。。

木易瓶子屋每日新鲜技术平台 第一时间了解互联网的那些事儿

第一章 Django介绍

作者:木易瓶子┆ 分类:python学习┆时间:2015-01-06┆点击: 69次┆tags: 第一章Django介绍

这本书是关于一个web开发框架Django的,它将节省你大量的时间,并且使你的web开发充满乐趣。通过Django,你可以建立一个高性能的web应用而只花费最小的消耗。

6

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

9
translating....

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

4

在这一章中,我们将一览 Django 的全貌。

5
translating....

什么是Web框架?
3

Django是一个卓越的新一代Web框架,而Django这个词语的意义是什么呢?

3

要回答这个问题,让我们来看看通过编写标准的CGI程序来开发Web应用,这在大约1998年的时候非常流行。编写CGI Web应用时,你需要自己处理所有的操作,就像你想烤面包,但是都需要自己生火一样。下面是实例,一个简单的CGI脚本,用Python写的,读取数据库并显示最新发布的十本书:

5
#!/usr/bin/python

import MySQLdb

print "Content-Type: text/html"
print
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()
	
7

代码十分简单。首先,根据CGI的要求输出一行Content-Type,接下来是一个空行。再接下来是一些HTML的起始标签,然后连接数据库并执行一些查询操作,获取最新的十本书。遍历这些书,同时生成一个HTML的无序序列。最后,输出HTML的结束标签并且关闭数据库连接。

3

类似这样的一次性动态页面,从头写起并不是最好的办法。其中一点,这些代码简单易懂,就算是一个开发初学者都能理解这16行代码从开始到结束做了些什么,不需要阅读额外的代码。同样这16行代码也很容易部署:只需要将它保存在名为“latestbooks.cgi”的文件里,上传至网络服务器,通过浏览器访问即可。

5

但是Web应用远远要复杂很多,这种方法就不再适用,而且你将会要面对很多问题:

  • 当多个动态页面需要同时连接数据库时,将会发生什么?当然,连接数据库的代码不 应该同时存在于各个独立的CGI脚本中,所以最踏实的做法是把这些代码重新组织到一个公共函数里面。

    1
  • 一个开发人员真的需要去关注如何输出Content-Type以及完成所有操作后去关闭数据库么?此类问题只会降低开发人员的工作效率,增加犯错误的几率。那些初始化和释放相关的工作应该交给一些通用的框架来完成。

    2
  • 如果这样的代码被重用到一个复合的环境中会发生什么?每个页面都分别对应独立的数据库和密码吗?从这点看来,就需要一些环境相关的配置文件。

    2
  • 如果一个Web设计师,完全没有Python开发经验,但是又需要重新设计页面的话,又将 发生什么呢?理想的情况是,页面显示的逻辑与从数据库中读取书本记录分隔开,这样 Web设计师的重新设计不会影响到之前的业务逻辑。

    2

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

MVC 设计模式

让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过Web框架来实现的功能与之前的方式有何不同。下面就是通过使用Django来完成以上功能的例子:

# models.py (the database tables)

from django.db import models

class Book(models.Model):
    name = models.CharField(maxlength=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>
	
8

先不要担心这个东西是 如何 工作的,我们主要是先想让你知道总体的设计,这里关键要注意的是 分离问题

2
  • models.py 文件主要用一个 Python 类来描述数据表。称为 模型(model) 。 运用这个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。

  • view.py 文件的 latest_books() 函数中包含了该页的业务层逻辑。这个函数叫做 视图(view) 。

  • urls.py 指出了什么样的 URL 调用什么的视图,在这个例子中 /latest/ URL 将会调用 latest_books() 这个函数

    2
  • latest_books.html 是 html 模板,它描述了这个页面的设计是如何的。

这些部分松散的组合在一起就是模型-视图-控制器(MVC)的设计模式。简单的说, MVC 是一种软件开发的方法,它把代码的定义和数据访问的方法(模型)与请求逻辑 (控制器)还有用户接口(视图)分开来。

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

本书中,每个组件都有它自己的一个章节。比如,第三章涵盖了视图,第四章是模板, 而第五章是模型。同时第五章也深入讨论了 Django 的 MVC 思想。

2

django 历史

在我们讨论代码之前我们需要先了解一下 Django 的历史。知道了一些历史知识有助于理解为什么 Django 要建立这个框架,因为这些历史有助于理解Django为何会这样运作。

1

如果你曾编写过网络应用程序。那么你很有可能熟悉之前我们的 CGI 例子。传统的 网络开发人员的开发流程是这样的:

1
  1. 从头开始编写网络应用程序。

  1. 从头编写另一个网络应用程序。

  1. 从第一步中总结(找出其中通用的代码),并运用在第二步中。

  1. 重构代码使得能在第 2 个程序中使用第 1 个程序中的通用代码。

  1. 重复 2-4 步骤若干次。

  1. 意识到你发明了一个框架。

这就是为什么 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 决定把这个框架发布为一个开源软件。 他们在 2005 年的 7 月发布并取名为 Django,来源于一个著名的爵士乐吉他演奏家 Django Reinhardt。

虽然现在 Django 是一个全世界开发者参与的开源项目,但原始的 World Online 开发者们 仍然提供主要的指导来促进这个框架的成长。 World Online 还有其它方面的重要贡献,比如雇员时间、 市场材料以及框架的 Web 网站的主机和带宽(http://www.djangoproject.com/)。

这些历史都是相关联的,因为她们帮助解释了很重要的两点。第一,Django最可爱的地方, 因为Django诞生于一个新闻环境,她提供了很多的功能(特别是她的管理接口,见第6章), 特别适合提供内容的网站,例如eBay, craigslist.org和washingtonpost.com,提供一种 基于数据库的动态网站。(不要看到这就感到沮丧,尽管Django擅长于动态内容管理系统, 但并不表示Django主要的目的就是用来创建动态内容的网站。 某些方面 特别高效 与 其他方面 不高效 是有区别的)

第二,Django的起源造就她的开源社区,因为Django来自于真实世界中的代码,而不是 来自于一个科研项目或者商业产品,她主要集中力量来解决Web开发中遇到的问题,同样 也是Django的开发者经常遇到的问题。这样,Django每天在现有的基础上进步。框架的 开发者对于为开发人员节省开发时间具有极大的兴趣,编写更加容易维护的程序,同时 保证程序运行的效率。开发人员自我激励,尽量的节省时间和享受他们的工作(To put it bluntly, they eat their own dog food.)

欢迎转载但请注明出处及链接,商业媒体使用请联系编辑(QQ 363630845)。
第一章,Django,介绍
正在加载中……