<p>如果我是你,我可能会首先看看基于Django的基于web的解决方案是否起作用。如果您需要更好的外观,可以将jQuery添加到这个组合中。如果它提供的功能太少,请使用PyQt。如果你有很多非常小的应用程序,可以使用多种技术。下面,你会发现我(有些冗长)的理由。</p>
<p><strong>Webapp与桌面应用程序</p>
<p>一年前,我们有一个商业数据库,需要一个前端。我们必须决定在前端使用什么技术。我们认为:</p>
<ol>
<li><a href="http://www.riverbankcomputing.co.uk/software/pyqt/intro" rel="noreferrer">PyQt</a></li>
<li>基于Web(查看<a href="http://wiki.python.org/moin/WebFrameworks" rel="noreferrer">here</a>了解Python的Web框架工程的概述)</li>
</ol>
<p>从我们的角度来看,PyQt的优势:</p>
<ul>
<L>以前的C++经验与<a href="http://www.qtsoftware.com/products/" rel="noreferrer">Qt</a>,我们知道Qt适合于任务。</li>
<li>包括所有必要的工具。</li>
<li>容易开发富有的客户。</li>
</ul>
<p>但是,我们决定不使用PyQt,而是使用基于web的解决方案。原因是:</p>
<ul>
<li>对前端的要求不高,而且在浏览器中很容易实现
(主要是报告,一些用于输入数据或运行函数的表单)。</li>
<li>应用程序的部署(以及新版本、错误修复等)
更容易,因为所有事情都只发生在服务器上的受控环境中。</li>
<li>访问控制/身份验证/权限是“免费的”,因为它是服务器(在我们的例子中是使用Active Directory身份验证的Apache)和浏览器的一部分,这对我们很重要。</li>
<li>应用程序无论如何都需要服务器连接,不必在客户端存储任何东西。</li>
</ul>
<p><em>简而言之:功能丰富的前端在受控部署环境中具有许多功能,使用Qt可能更容易实现。对于我们轻量级的前端,基于服务器的解决方案对我们来说似乎更好。</p>
<p><strong>哪个web框架?</strong></p>
<p>既然我们已经决定了一项技术,我们必须选择一个框架。我们进行了一些研究,并详细研究了两种备选方案:</p>
<ol>
<li><a href="http://www.djangoproject.com/" rel="noreferrer">Django</a></li>
<li>一个软件栈,由<a href="http://www.cherrypy.org/" rel="noreferrer">CherryPy</a>作为分派器(将http请求与功能和所有相关的东西相匹配)、<a href="http://www.makotemplates.org/" rel="noreferrer">Mako</a>作为生成网页的模板库、<a href="http://www.sqlalchemy.org/" rel="noreferrer">SQLAlchemy</a>作为ORM和<a href="http://jquery.com/" rel="noreferrer">jQuery</a>作为客户端功能组成。</li>
</ol>
<p>我们评估了两个备选方案,最后确定了第二个方案。这个决定是由我们真正的“轻量级”前端需求(很多非常小的应用程序)驱动的。一堆软件——我们可以根据需要进行混合和匹配——对我们来说似乎更好。我们可以在不需要web前端的情况下重用SQLAlchemy,我们可以只使用CherryPy而不使用模板库和ORM,等等。在许多其他情况下,我会选择Django而不是这个堆栈。</p>
<p><strong>总而言之:</strong></p>
<ul>
<li>一个大型、复杂的应用程序->;PyQt</li>
<li>一套相对相似、简洁的报告、表格等,只有一个外观和感觉->;Django</li>
<li>一组相对不同的事物,它们在需求和使用的技术上有很大的不同,或者在其他情况下重复使用某些技术->;根据需要混合使用各种技术</li>
</ul>