【问题标题】:Which lightweight python web framework has applications and hot-deployed code哪个轻量级python web框架有应用和热部署代码
【发布时间】:2011-09-23 12:51:24
【问题描述】:

我习惯于 PHP 拥有应用程序。例如,

c:\xampp\htdocs\app1
c:\xampp\htdocs\app2

可以访问

localhost://app1/page.php
localhost://app2/page.php

注意事项:

  1. 位于 www-root 目录中的目录直接与 URL 映射
  2. 添加/删除/更改文件/目录时,工作进程会无缝反映该更改(热部署新文件)。

我正在寻找一个成熟的python web 框架。它适用于将为多个客户端部署的 Web API,并且每个副本将在定制上有所不同。我们的工作流程在我们和客户之间有频繁的交互/修订周期。因此,“拖放”部署是必须的。

哪个 python 框架支持这个?我更喜欢轻量级的解决方案(它不会强加 MVC、ORM 等)


相关

How to build Twisted servers which are able to do hot code swap in Python?

Python web hosting: Why are server restarts necessary?

fastcgi, cherrypy, and python

【问题讨论】:

    标签: python


    【解决方案1】:

    据我所知,没有成熟的 python 框架允许您将 url 映射到 python 模块,坦率地说,这是有充分理由的。您可以使用 CGI 来做到这一点,但这绝对不是部署 Python 应用程序的推荐方式。抛开这个要求不谈,flaskbottle 都是具有相似方法的轻量级微型 Web 框架,都允许您在检测到更改时自动重新加载(这仅在开发过程中是明智的)。

    【讨论】:

      【解决方案2】:

      据我所知,Python 中没有任何 Web 框架可以让您开箱即用,但如果您需要它,添加一点 convention over configuration 并不难。

      只需在 Python 中选择您选择的 Web 框架,然后为主应用程序编写一个包装器,该包装器会遍历一个目录或一组目录,并从其中的模块自动注册路由。让您的模块在它们的__init__.py 文件中对与它们一起放置的其他文件执行相同的操作。然后只需将您的 WSGI 代码设置为在 WSGI 脚本更新时自动重新加载,您在开发过程中的部署就变成了一个两步过程 - 添加文件然后触摸 dev_app.wsgi。您甚至可以向这个包装器添加一个 real 部署选项,该选项会像这样设置 dev 环境并生成硬编码的 URL 到函数的映射以进行部署。

      但是,所有这些工作并不是真正必要的。 Python 不是 PHP,您在其中一种开发方式不一定能很好地转化为另一种。如果客户端需要可变路由,请使用动态路由并为他们(或您)提供管理界面来控制内容到 URL 的映射。使用平面文件、SQLite、NoSQL 数据存储或以太网来存储这些映射和内容。使用 Jinja2、Mako、Cheetah 或 Genshi 等模板引擎来维护您的总体布局。用面向对象的结构将这一切包装起来,以使其易于扩展(或者,如果这对您来说更自然,则使用功能范式)。 或者,将整个动态放到生产部分中,然后像 Jekyll 那样生成平面 HTML 文件。

      【讨论】:

      • 希望我能接受两个答案。但我实际上受到启发,想把你在第 1 段中提到的东西拼凑起来。
      【解决方案3】:

      CherryPy 是一个成熟的 Web 框架,可在检测到更改时自动重新部署。文件结构 - URL 不存在,但它是一个轻量级框架,不会强加 ORM、MVC 甚至模板引擎。

      【讨论】:

        【解决方案4】:

        如果您习惯于 PHP,您可能想看看 Apache 模块 mod_pythonmod_wsgi(如果您进行 Web 开发,则通常是 WSGI - 这是 Python 的方式)。

        通过这两个模块,Python 解释器在每次请求进入时启动(类似于 PHP)。不用说,这会减慢速度,但您将始终根据最新代码获得结果。根据您的预期流量数字,这可能适合您,也可能不适合您。

        但是:如果您决定编写自己的框架,您很可能想要编写一个支持“热部署”的系统。尽管reload() 命令是内置的,但它需要的远不止这些,还会让你进入一个充满痛苦的世界。

        【讨论】:

        • 不要使用 mod_python,因为它不再被维护或开发。在 mod_python 或 mod_wsgi 中,Python 解释器都不会在每个请求上启动,它与已加载的代码一起在内存中保持持久性。因此,代码更改不会在每个请求上都被拾取。
        • “Python 解释器开始处理每个请求”,这将是 CGI 方式。
        猜你喜欢
        • 1970-01-01
        • 2017-06-15
        • 1970-01-01
        • 2010-10-06
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 2012-02-08
        • 2014-07-29
        相关资源
        最近更新 更多