让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过 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 思想。
原文:《The Django Book》 http://djangobook.py3k.cn/