我在BaseHTTPServer中编写了一个Web API。它仅用于localhost。它在GET / POST操作上返回JSON对象。
http://localhost:8888/operation?param
和代码就像
def do_GET(self):
if self.path=="operation":
self.wfile.write("output")
但我担心保持活跃机制(阅读:可以重生工作人员的网络服务器),缺乏多线程和PITA-ful维护。
就像我说的那样,我正在考虑选择此Web框架的开发和部署问题。
Web界面目前有250行,功能非常简单。我正在寻找适合清洁维护和部署的东西。我不希望框架的MVC,ORM,模板和其他功能弄乱我的学习曲线。重定向到适当模块的UrL模式很不错。
它应该在具有WSGI模块的成熟服务器上进行部署,并且最小化。这样的设置有热部署(为了更好的词),安装新的应用程序或更新代码意味着将文件复制到文件系统中的www-root。
CherryPy和Flask似乎很有趣。 Django和Web2Py似乎太全面了。
答案 0 :(得分:6)
部署 wsgi 的推荐方法是作为长时间运行进程,嵌入式或daeomonized,而不是cgi脚本。无论哪种方式,它只是像上传文件一样有点不同,通过触摸配置文件重新启动服务器/进程通常是你使用wsgi最接近“热部署”。
毋庸置疑,如果符合wsgi,框架本身不会施加任何类型的部署限制。根据您的需要选择:apache + modwsgi,gunicorn,cherry.py,paste。他们都没有提供“热部署”(afaik),你仍然需要创建一个wsgi脚本并重新加载进程。文件系统布局通常无关紧要,这很好。您通常也不会获得自动加载。我知道werkzeug和cherry.py,并且werkzeug也提供了一些非常酷的调试工具。请注意,tornado / werkzeug *本身提供了自动重载选项,但实际上是考虑用于开发而不是部署,而not compatible用于wsgi模块。
但无论部署多么痛苦或无痛,建议使用像Fabric这样的东西来自动部署,而设置wsgi Web服务器并不困难。
框架本身的选择有点棘手,取决于你想要在什么级别工作.Tornado,werkzeug是流行的低级框架,(但也包括更高级别的工具,很多是框架+ webserver),但是你也可以直接使用webob,只需插入你需要的任何东西。
你有像flask或瓶子这样的微框架,然后是轻量级框架,比如web2.py,或者可能是金字塔(框架有多么模糊的线条)。
然后你有“全栈”django,grok,turbogears等...... 然后你有zope,这已经节食但仍然非常沉重。
请注意,您几乎可以对所有这些做任何事情(只取决于您想要弯曲多少),在许多情况下,您可以轻松地交换组件。我开始试用像瓶子或者烧瓶这样的微框架(你不必使用ORM或模板,但是一旦你这么做就很容易获得),而且看看 webob 。
*评论:将werkzeug添加到非真正的自动加载阵营。
答案 1 :(得分:0)
对于您所描述的内容,我会使用: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分钟。
答案 2 :(得分:0)
我个人喜欢并且一直使用web.py.它非常轻量级,可定制并符合WSGI标准。