哪个Python网页框架开发和部署无忧?
我写了一个在BaseHTTPServer上的网络API。这个API只打算在本地使用。它在进行GET和POST操作时会返回JSON对象。
http://localhost:8888/operation?param
代码大致是这样的:
def do_GET(self):
if self.path=="operation":
self.wfile.write("output")
不过我有点担心保持连接的机制(也就是说,一个可以重新启动工作进程的网络服务器)、缺乏多线程支持,以及维护起来会很麻烦。
正如我所说,我在考虑选择这个网络框架时的开发和部署问题。
开发
目前这个网络接口有250行代码,功能非常简单。我希望找到一个便于维护和部署的框架。我不想让框架的MVC、ORM、模板等功能干扰我的学习过程。能够通过URL模式重定向到相应模块的功能很好。
部署
它应该能在一个成熟的服务器上部署,并且需要一个WSGI模块,尽量简单方便。这样的设置应该有热部署(如果可以这样称呼的话),也就是说,安装新应用或更新代码只需要把文件复制到文件系统的www根目录下。
CherryPy和Flask看起来很有趣,而Django和Web2Py则显得太复杂了。
2 个回答
根据你描述的情况,我推荐你使用:Tornado Web Server
这是一个简单的示例:
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
这个服务器非常容易扩展,我觉得你用自己的代码设置好它大概只需要10分钟。
推荐的部署 wsgi 的方式是作为一个 长时间运行的进程,可以嵌入到应用中或者作为守护进程,而不是像 cgi 脚本那样。无论哪种方式,部署的过程都会和简单上传文件(像在 php 中那样)有些不同。通常情况下,想要实现“热部署”,你需要通过修改配置文件来重启服务器或进程,这就是最接近的做法了。
需要说明的是,只要符合 wsgi 标准,框架本身并不会限制你的部署方式。你可以根据自己的需求选择:apache+modwsgi、gunicorn、cherry.py、paste。这些都不提供“热部署”(据我所知),你仍然需要创建一个 wsgi 脚本并重新加载进程。文件系统的布局通常不是问题,这点很好。你通常也不会得到自动重载的功能。我知道 werkzeug 和 cherry.py 提供了这个功能,werkzeug 还提供了一些非常酷的调试工具。请注意,tornado/werkzeug* 本身提供了自动重载选项,但实际上是为了开发而不是部署,并且与 wsgi 模块 不兼容。
无论部署过程是多么痛苦或轻松,建议使用像 fabric 这样的工具来自动化你的部署,设置一个 wsgi 网络服务器其实并不难。
选择框架本身有点棘手,取决于你想在哪个层次上工作。Tornado 和 werkzeug 是流行的低级框架(但也包含一些高级工具,很多是框架+网络服务器),你也可以直接使用 webob,然后根据需要添加其他组件。
你还有像 flask 或 bottle 这样的微框架,接着是轻量级框架,比如 web2.py,或者可能是 pyramid(框架的重量级别界限有点模糊)。
然后是“全栈”框架,比如 django、grok、turbogears 等等……还有 zope,虽然它已经减肥了,但仍然很重。
注意,你几乎可以用它们做任何事情(只是看你愿意怎么折腾),在很多情况下,你可以很容易地替换组件。我建议你先试试像 bottle 或者 flask 这样的微框架(你不一定要使用 ORM 或模板,但一旦需要,它们很容易获取),同时也可以看看 webob。
*评论:把 werkzeug 加入了不算真正自动重载的行列。