让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过 Web 框架来实现的功能与 之前的方式有何不同。下面就是通过使用 Django 来完成以上功能的例子:
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 from models import Book 13 14 def latest_books(request): 15 book_list = Book.objects.order_by('-pub_date')[:10] 16 return render_to_response('latest_books.html', {'book_list': book_list}) 17 18 19 # urls.py (the URL configuration) # 控制器 20 21 from django.conf.urls.defaults import * import views 22 23 urlpatterns = patterns( 24 '', 25 (r'latest/$', views.latest_books), 26 ) 27 28 29 # latest_books.html (the template) 30 31 <html><head><title>Books</title></head> 32 <body> 33 <h1>Books</h1> 34 <ul> 35 {% for book in book_list %} 36 <li>{{ book.name }}</li> 37 {% endfor %} 38 </ul> 39 </body></html>
先不要担心这个东西是 如何 工作的,我们主要是先想让你知道总体的设计,这里关键要注 意的是 分离问题
- models.py 文件主要用一个 Python 类来描述数据表。称为 模型 (model) 。 运用这 个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录 而无需写一条又一条的 SQL 语句。
- view.py 文件的 latest_books() 函数中包含了该页的业务层逻辑。这个函数叫做 视 图 (view) 。
- urls.py 指出了什么样的 URL 调用什么的视图,在这个例子中 /latest/ URL 将会调 用 latest_books() 这个函数
- latest_books.html 是 html 模板,它描述了这个页面的设计是如何的。
这些部分松散的组合在一起就是模型-视图-控制器(MVC)的设计模式。简单的说, MVC 是 一种软件开发的方法,它把代码的定义和数据访问的方法(模型)与请求逻辑 (控制器)还 有用户接口(视图)分开来。
这种设计模式关键的优势在于各种组件都是 松散结合 的。这样,每个由 Django 驱动 的 Web 应用都有着明确的目的,并且可独立更改而不影响到其它的部分。比如,开发者 更改一个应 用程序中的 URL 而不用影响到这个程序底层的实现。设计师可以改变 HTML 页面 的样式而 不用接触 Python 代码。数据库管理员可以重新命名数据表并且只需更改一个地方,无需从 一大堆文件中进行查找和替换。
本书中,每个组件都有它自己的一个章节。比如,第三章涵盖了视图,第四章是模板, 而第 五章是模型。同时第五章也深入讨论了 Django 的 MVC 思想。