什么是Web框架?
Django 是 Web框架 中非常出色的新一代成员。那么 Web 框架这个术语的确切含义到底是什么呢?
要回答这个问题,让我们来看看通过编写标准的CGI程序来开发Web应用,这在大约1998年的时候非常流行。编写CGI Web应用时,你需要自己处理所有的操作,就像你想烤面包,但是都需要自己生火一样。
但是Web应用远远要复杂很多,这种方法就不再适用,而且你将会要面对很多问题:
-
当多个动态页面需要同时连接数据库时,将会发生什么?当然,连接数据库的代码不应该同时存在于各个独立的CGI脚本中,所以最踏实的做法是把这些代码重新组织到一个公共函数里面
-
一个开发人员真的需要去关注如何输出Content-Type以及完成所有操作后去关闭数据库么?此类问题只会降低开发人员的工作效率,增加犯错误的几率。那些初始化和释放相关的工作应该交给一些通用的框架来完成。
-
如果这样的代码被重用到一个复合的环境中会发生什么?每个页面都分别对应独立的数据库和密码吗?从这点看来,就需要一些环境相关的配置文件。
-
如果一个Web设计师,完全没有Python开发经验,但是又需要重新设计页面的话,又将发生什么呢?理想的情况是,页面显示的逻辑与从数据库中读取书本记录分隔开,这样 Web设计师的重新设计不会影响到之前的业务逻辑
以上正是Web框架致力于解决的问题。Web框架为应用程序提供了一套程序框架,这样你可以专注于编写清晰、易维护的代码,而无需从头做起。简单来说,这就是Django所能做的
MVC 设计模式
M:模型 V:视图 C:控制器
是模型-视图-控制器(MVC)的设计模式。简单的说, MVC 是一种软件开发的方法,它把代码的定义和数据访问的方法(模型)与请求逻辑(控制器)还有用户接口(视图)分开来。
Django来完成MVC功能的例子
1 # models.py (the database tables)
2
3 from django.db import models
4
5 class Book(models.Model):
6 name = models.CharField(maxlength=50)
7 pub_date = models.DateField()
8
9
10 # views.py (the business logic)
11
12 from django.shortcuts import render_to_response
13 from models import Book
14
15 def latest_books(request):
16 book_list = Book.objects.order_by('-pub_date')[:10]
17 return render_to_response('latest_books.html', {'book_list': book_list})
18
19
20 # urls.py (the URL configuration)
21
22 from django.conf.urls.defaults import *
23 import views
24
25 urlpatterns = patterns('',
26 (r'latest/$', views.latest_books),
27 )
28
29
30 # latest_books.html (the template)
31
32 <html><head><title>Books</title></head>
33 <body>
34 <h1>Books</h1>
35 <ul>
36 {% for book in book_list %}
37 <li>{{ book.name }}</li>
38 {% endfor %}
39 </ul>
40 </body></html>
代码说明:
-
models.py 文件主要用一个 Python 类来描述数据表。称为 模型(model) 。运用这个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除数据库中的记录而无需写一条又一条的SQL语句。
-
view.py 文件的 latest_books() 函数中包含了该页的业务层逻辑。这个函数叫做 视图(view) 。
-
urls.py 指出了什么样的 URL 调用什么的视图,在这个例子中 /latest/ URL 将会调用 latest_books() 这个函数
-
latest_books.html是 html 模板,它描述了这个页面的设计是如何的。
django 历史
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。