<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DreamIdea &#187; Python</title>
	<atom:link href="http://www.dreamidea.net/category/back-end/python/feed" rel="self" type="application/rss+xml" />
	<link>http://www.dreamidea.net</link>
	<description></description>
	<lastBuildDate>Tue, 12 Apr 2011 13:58:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Python应用：轻量级Web框架Quixote</title>
		<link>http://www.dreamidea.net/back-end/python/python_lightweight_web_framework_quixote</link>
		<comments>http://www.dreamidea.net/back-end/python/python_lightweight_web_framework_quixote#comments</comments>
		<pubDate>Sat, 13 Feb 2010 05:59:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Quixote]]></category>

		<guid isPermaLink="false">http://www.dreamidea.net/?p=96</guid>
		<description><![CDATA[<a href="http://www.dreamidea.net/back-end/python/python_lightweight_web_framework_quixote" title="Python应用：轻量级Web框架Quixote"></a>缘起 Quixote是 由美国全国研究创新联合会（CNRI，Corporation for National Research Initiatives）的工程师A.M.Kuchling、Neil Schemenauer和Greg Ward开发的一个轻量级Web框架。和几乎所有的开源项目一样，Quixote也是为了满 足实际需要而出世的。 CNRI当时在进行一个名为MEMS Exchange的项目（http://www.mems-exchange.org/）。MEMS是微机电系统的缩写，制造一个MEMS设备往往需要多种制造设备，单个工厂可能无 法提供所需的所有设备。因此，MEMS Exchange项目就是要整合起多家制造厂的资源，利用互联网派单和追踪制造过程，形成一个分布式的MEMS设备制造网络。 起初，他们做了一个Java版的客户端程序提供给用户，但他们发现，没有人愿 意使用这个客户端程序，大家还是习惯性地用邮件发送加工过程。最终他们认识到，虽然客户端的表现力更强，功能也更完整，但相比起要下载一个庞大的程序，用 户更加愿意使用他们每天面对的浏览器来做事情。于是，他们决定改到Web界面上来，要做一个Web应用。但是用Java的servlets开发Web应用 是一件非常低效的事情，所以他们选择了Zope（和现在不同，在1999年，Python的Web应用框架没有什么选择的余地，基本上是Zope一家独 大）。3个月的开发之后，他们得到了一个运转良好的系统。 然而，Zope带来的快乐并没有持续多长时间。几个月后，他们想提供更加复杂 一点的界面，却发现用Zope写的代码难以维护和调试，在浏览器的文本编辑框里写代码也实在不是什么好的体验。由于当时除了Zope之外也没有什么别的 Python Web框架，他们决定：自己写一个！在2000年，编写一个新的Web框架是类似于向风车挑战一样的事情，开发团队自嘲地用堂吉诃德的名字命名这个框架：Quixote。 Quxiote的特点： 一、目录式的URL分发规则 所有的的Web框架要解决的第一件事，都是如何将用户的URL请求映射到程序上去。与ROR和Django这类基于Route和正则匹配的框架不同。Quxiote使用目录的方式逐层查找来实现的，最后请求将被映射到一个类的方法上。 假设你有一个应用是app。如果用户请求http://localhost/hello/，Quxiote将会将这个请求映射到app.hello._q_index()这个方法上，_q_index()方法是Quixote默认的根路径方法。如果用户请求http://localhost/hello/world, Quxiote将会将这个请求映射到app.hello.world()这个方法上。如果你需要为用户的访问设置权限，你只要实现相应目录下的_q_access()方法。 二、最接近Python的模板语言 Web 框架的模板一直是备受争议的环节，因为不同的模板框架提供了不同的模板标签，这提高了开发人员的学习成本。 所以Quxiote提倡用Python来写模板，最大程度的使用已有的Python编程能力。 Quxiote的模板语言叫做PTL（Python Template Language），PTL的模板文件以.ptl结尾，需要执行Quxiote的quixote.enable_ptl()之后Python才会像解析.py一样解析.ptl文件。PTL文件将html代码嵌入到Python代码中，并进行切块。这样你能在模板中随意的书写Python的代码来实现模板。这和现在比较流行的模板实现机制恰好相反。本人还是比较支持，以html作为模板文件，再用Python来解析html中的标签。这种方式更加清楚，可维护性更高。 三、显示标记，拒绝魔术 在The zen of python &#8230;<p class="read-more"><a href="http://www.dreamidea.net/back-end/python/python_lightweight_web_framework_quixote">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://www.dreamidea.net/back-end/python/python_lightweight_web_framework_quixote" title="Python应用：轻量级Web框架Quixote"></a><h2>缘起</h2>
<p>Quixote是 由美国全国研究创新联合会（CNRI，Corporation for National Research  Initiatives）的工程师A.M.Kuchling、Neil Schemenauer和Greg  Ward开发的一个轻量级Web框架。和几乎所有的开源项目一样，Quixote也是为了满 足实际需要而出世的。</p>
<p>CNRI当时在进行一个名为MEMS Exchange的项目（<a href="http://www.mems-exchange.org/">http://www.mems-exchange.org/</a>）。MEMS是微机电系统的缩写，制造一个MEMS设备往往需要多种制造设备，单个工厂可能无 法提供所需的所有设备。因此，MEMS  Exchange项目就是要整合起多家制造厂的资源，利用互联网派单和追踪制造过程，形成一个分布式的MEMS设备制造网络。</p>
<p>起初，他们做了一个Java版的客户端程序提供给用户，但他们发现，没有人愿 意使用这个客户端程序，大家还是习惯性地用邮件发送加工过程。最终他们认识到，虽然客户端的表现力更强，功能也更完整，但相比起要下载一个庞大的程序，用 户更加愿意使用他们每天面对的浏览器来做事情。于是，他们决定改到Web界面上来，要做一个Web应用。但是用Java的servlets开发Web应用 是一件非常低效的事情，所以他们选择了Zope（和现在不同，在1999年，Python的Web应用框架没有什么选择的余地，基本上是Zope一家独 大）。3个月的开发之后，他们得到了一个运转良好的系统。</p>
<p>然而，Zope带来的快乐并没有持续多长时间。几个月后，他们想提供更加复杂 一点的界面，却发现用Zope写的代码难以维护和调试，在浏览器的文本编辑框里写代码也实在不是什么好的体验。由于当时除了Zope之外也没有什么别的 Python  Web框架，他们决定：自己写一个！在2000年，编写一个新的Web框架是类似于向风车挑战一样的事情，开发团队自嘲地用堂吉诃德的名字命名这个框架：Quixote。</p>
<h2>Quxiote的特点：</h2>
<h4>一、目录式的URL分发规则</h4>
<p>所有的的Web框架要解决的第一件事，都是如何将用户的URL请求映射到程序上去。与ROR和Django这类基于Route和正则匹配的框架不同。Quxiote使用目录的方式逐层查找来实现的，最后请求将被映射到一个类的方法上。</p>
<p>假设你有一个应用是app。如果用户请求http://localhost/hello/，Quxiote将会将这个请求映射到app.hello._q_index()这个方法上，_q_index()方法是Quixote默认的根路径方法。如果用户请求http://localhost/hello/world, Quxiote将会将这个请求映射到app.hello.world()这个方法上。如果你需要为用户的访问设置权限，你只要实现相应目录下的_q_access()方法。</p>
<h4>二、最接近Python的模板语言</h4>
<p>Web 框架的模板一直是备受争议的环节，因为不同的模板框架提供了不同的模板标签，这提高了开发人员的学习成本。</p>
<p>所以Quxiote提倡用Python来写模板，最大程度的使用已有的Python编程能力。</p>
<p>Quxiote的模板语言叫做PTL（Python Template Language），PTL的模板文件以.ptl结尾，需要执行Quxiote的quixote.enable_ptl()之后Python才会像解析.py一样解析.ptl文件。PTL文件将html代码嵌入到Python代码中，并进行切块。这样你能在模板中随意的书写Python的代码来实现模板。这和现在比较流行的模板实现机制恰好相反。本人还是比较支持，以html作为模板文件，再用Python来解析html中的标签。这种方式更加清楚，可维护性更高。</p>
<h4>三、显示标记，拒绝魔术</h4>
<p>在The zen of python 中有一句话</p>
<pre>Explicit is better than implicit. #显示的说明要比不言明的好。</pre>
<p>所以如果你在Python命令行中输入：<br />
import this<br />
便可以看到有趣的提示，这便是Python编程所坚持的哲理</p>
<p>在Quixote中需要公布出来的路径需要配置在一个_q_exports=[]列表中。配置的内容即方法名称。</p>
<h2>Quixote的优点：</h2>
<ol>
<li>简单，Quxiote的全部代码量为7000行左右，而且包含了大量的注释，如果去掉注释，则只有大约2500行代码。这也是我选择Quixote来学习Python的原因，因为你能容易通过阅读代码看到Quxiote做了什么。</li>
<li>高效，这一方面得益于Python语言本身的特点和Quxiote简单的架构，另一方面得益于用PTL模板。</li>
<li>安全，这也得益于Quxiote的简单，使得我们能很好的控制框架，并且它提供了一些HTML输出方法，保证了HTML输出的安全。</li>
<li>自由，开源就是好！</li>
<li>久经考验，历史悠久，在大量的企业应用中被证明是一个高效，灵活，稳定的框架，最著名的应用就是豆瓣（<a href="http://www.douban.com" target="_blank">http://www.douban.com</a>），我也是从豆瓣的架构中知道了Quxiote。</li>
</ol>
<h2>Quxiote的缺点：</h2>
<ol>
<li>没有内置的数据库支持和安全验证机制</li>
<li>PTL适合程序员，并不适合美工参与前端代码的编写和修改</li>
<li>内置服务器不能很好的支持Debug，如果使用simple_server.py来调试虽然可以跟踪到，但是如果修改代码必须重启服务器，如果使用cgi，虽然修改代码后不用重启服务器，但是无法跟踪到代码，并且Quixote提供的Session支持会失效，除非使用Session持久化。</li>
<li>没有内置WSGI的支持，WSGI是Python PEP中提出的规范即（Web Server Gateway Interface）这个规范被广泛应用，使得Python Web Server 和 Python Web Framework能很好的兼容。</li>
</ol>
<h2>总结：</h2>
<p>首先，对于想学习Python Web开发的人来说，通过使用Quixote将会带来很多的好处，Quxiote很接近Python，不会像Django和Pylons虽然提供了很好的开发流程，也能很快的上手，但是很难了解到这些框架到低做了什么，至少对于初学者来说，使用这些框架并不太适合。而Quixote代码量少，但包括了很多核心功能的实现，如Request，Response，Session，WebServer等。</p>
<p>其次，Quixote的简单使得Quixote非常灵活，也意味着你需要做更多的二次开发，所以想用Quixote做出好的网站，还需要有一定的Python基础。如数据库开发，Python多线程应用等等。</p>
<p>由于Quixote并没有为我们提供数据库的支持和安全验证机制，但是你同样可以使用一些已有的框架来解决这个问题，如SqlAlchemy。SqlAlchemy可以说是Python的ORM标准，就像Java中的Hibernate一样，所以是不二的选择，很多人没有选择Django，也是因为Django的ORM解决方法并不能让人满意。</p>
<p>另外本人并不使用Quixote的PTL，毕竟时代的发展已经有更好的技术来替代他了，比如Python的模板引擎Mako，豆瓣在新的开发中也部分使用了Mako。</p>
<p>SqlAlchemy和Mako的介绍以及和Quixote集成的文章也会陆续推出。</p>
<p>【扩展阅读】</p>
<p>The zend of python ：<a target="_blank" href="http://www.python.org/dev/peps/pep-0020/">http://www.python.org/dev/peps/pep-0020/</a></p>
<p>Python Web Server Gateway Interface：<a target="_blank" href="http://www.python.org/dev/peps/pep-0333/">http://www.python.org/dev/peps/pep-0333/</a></p>
<p>Quixote White Pager：<a target="_blank" href="http://www.quixote.ca/overview/paper.html">http://www.quixote.ca/overview/paper.html</a></p>
<p>QuixoteCookbook：<a target="_blank" href="http://www.quixote.ca/qx/QuixoteCookbook">http://www.quixote.ca/qx/QuixoteCookbook</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamidea.net/back-end/python/python_lightweight_web_framework_quixote/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

