Pylons  - 讨论区

标题:转:【翻译】The Definitive Guide to Pylons(二)

2010年10月22日 星期五 16:57

旧的方式:CGI脚本
     为了准确地了解Pylons以及它是如何不同于其他框架,我们要看一个简单的Python脚本,分析CGI方式的优点和缺点。然后,我们会研究Pylons和其他框架如何改善CGI脚本所提供的功能。最后,我们将研究Pylons如何比其他框架更进一步的暴露模块化的API,当传统的web框架方案不能完全满足您的需求的时候,你可以使用这些API扩展或改变Pylons为自己的目的服务。
    在过去,开发人员通常编写Web应用的一系列简单脚本,其中每一项将负责访问数据库以得到需要的数据,生成HTML代码以输出页面并作为胶水代码运行该web应用。每个单独的脚本能够快速编写,对于有经验的开发人员来说,可以在第一时间轻易地读懂其代码,因为一切有关特定网页的生成都在一个脚本中。开发人员通过SQL直接访问自己使用的数据库,并且有权利和弹性以满足自己需求的合适方式来编写代码。
    下面是一个简单的例子,说明如何来写CGI脚本:
#!/usr/bin/env python

# Get the configuration for the script
import ConfigParser
config = ConfigParser.ConfigParser()
config.read('/path/to/config.ini')

# If debugging is enabled set up the cgitb module
if config.get('general', 'debug') == 'on':
    import cgitb; cgitb.enable()

# Begin the non-configuration-dependant imports
import cgi
import MySQLdb
import os

# Output the HTTP Headers
print "Content-type: text/html\n\n"

# Output the head of the HTML page
print "<html><head><title>Example</title></head>"
print "<body><h1>Example</h1><p>Here are the comments:</p>"

# Get the id from the URL based on the QUERY_STRING environment
# variable using the cgi module
fields = cgi.FieldStorage()
page = int(fields['page'].value)

# Fetch data from the database
connection = MySQLdb.connect(
    db=config.get('database', 'database'),
    user=config.get('database', 'user'),
    passwd=config.get('database', 'password'),
    host=config.get('database', 'host')
)
cursor = connection.cursor()
cursor.execute("SELECT id, data FROM comment WHERE page=%s", (page,))
results = cursor.fetchall()
cursor.close()
connection.close()

# Output the comments
for id, data in results:
    print "<p>Commment #%s: %s</p>"%(id, cgi.escape(data))

# Output the rest of the HTML page
print "</body></html>"


    当一个URL如 /cgi-bin/test.cgi?page=1被输入访问时,该脚本将显示一个Comment清单。你还需要一个配置文件,看起来像这样:


[general]
debug = off

[database]
database = dbname
host = localhost
user = james
password = somepassword


CGI脚本代码无法做到优雅,但它确实有一些好处。让我们看看优点和缺点。首先优点:
 1. 了解HTTP协议和SQL的人可能能够理解大部分的代码,因为它使用标准的网络开发技术
 2. 以这种方式的编码给了开发人员大量的权力,因为他们能够控制HTTP响应的每一个方面,并且可以编写他们喜欢的复杂的SQL查询
一些缺点:
 1. 网站的每个脚本需要相同的代码加载配置文件,并处理错误
 2. 数据库访问代码重复编写,并且来自数据库的数据结构并不是你的应用程序想处理的对象
 3. CGI脚本可能是缓慢的,因为每个请求都需要脚本使用的整个Python解释器以及模块加载到内存中
 4. 设计师将很难改变网站的外观,因为生成的HTML代码是被嵌入到与Python代码中
还有用大量脚本创建一个整体应用带来了一些更微妙的问题:
 1. 代码在不同的脚本之间频繁拷贝
 2. 随着时间的推移,代码将变得难以维持,开发人员在某些文件更改数据库的代码,却没意识到其他脚本有可能依赖过去的数据库或代码的工作方式
 3. 难以理解整个应用的结构,因为每个脚本都是相当自主的工作
 4. 诸如/cgi-bin/path/to/script.cgi?controller=page&action=view&id=3 的URL格式不容易反映web应用的结构,并且对于用户来说,不如/page/view/3的URL格式来得自然。
为了解决这些问题Pylons(以及其他流行的框架,如Django、TurboGears和Ruby on Rails)使用两个主要技术:
 1. MVC架构
 2. 公约的配置

Pylons还特别重视:
 1. 松耦合和干净分离

我们将在以下各节看看这些想法。

原文:

http://hi.baidu.com/zhuifengdenanhai/blog/item/be953e4eb9567bccd1c86a8b.html

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号