让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过Web框架来实现的功能与之前的方式有何不同。 下面就是通过使用Django来完成以上功能的例子: 首先,我们分成4个Python的文件,(models.py , views.py , urls.py ) 和html模板文件 (latest_books.html )。
models.py:
3 | from django.db import models |
5 | class Book(models.Model): |
6 | name = models.CharField(max_length = 50 ) |
7 | pub_date = models.DateField() |
views.py:
3 | from django.shortcuts import render_to_response |
4 | from models import Book |
6 | def latest_books(request): |
7 | book_list = Book.objects.order_by( '-pub_date' )[: 10 ] |
8 | return render_to_response( 'latest_books.html' , { 'book_list' : book_list}) |
urls.py:
3 | from django.conf.urls.defaults import * |
6 | urlpatterns = patterns('', |
7 | (r '^latest/$' , views.latest_books), |
latest_books.html:
03 | <html><head><title>Books< / title>< / head> |
07 | { % for book in book_list % } |
08 | <li>{{ book.name }}< / li> |
不用关心语法细节,只要用心感觉整体的设计。 这里只关注分割后的几个文件:
- 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 %}
这种设计模式关键的优势在于各种组件都是 松散结合 的。这样,每个由 Django驱动 的Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。 比如,开发者 更改一个应用程序中的 URL 而不用影响到这个程序底层的实现。 设计师可以改变 HTML 页面 的样式而不用接触 Python 代码。 数据库管理员可以重新命名数据表并且只需更改一个地方,无需从一大堆文件中进行查找和替换。