【问题标题】:what's with a "embedded webserver in a web application" in Python?Python中的“Web应用程序中的嵌入式Web服务器”是什么?
【发布时间】:2010-07-14 01:31:15
【问题描述】:

CherryPy 声明:

您的 CherryPy 驱动的网络应用程序 实际上是独立的 Python 嵌入自己的应用程序 多线程网络服务器。你可以 将它们部署在您可以运行的任何地方 Python 应用程序。阿帕奇不是 必需,但可以运行 它背后的 CherryPy 应用程序(或 lighttpd 或 IIS)。樱桃派 应用程序在 Windows、Linux、 Mac OS X 和任何其他平台 支持 Python。

来自 PHP 并想学习 Python,我在寻找可以设置以开始 Python Web 开发的网络服务器时遇到了a thread here in SO。然而,在几乎把自己谷歌搜索到死之后,我仍然找不到一个。我遇到了诸如“Django 有自己的轻量级网络服务器”和前面提到的 Cherrypy 之类的条目。

我感到困惑的是:我习惯于使用 XAMPP,我有一个 Web 服务器、一个数据库服务器和我的应用程序,我无法想象“应用程序本身内部的 Web 服务器”的想法。那么如何连接到我的数据库服务器呢?如何配置自定义 url 和目录保护等内容(很像我在 Apache 中所做的)?

提前谢谢各位!

【问题讨论】:

    标签: python


    【解决方案1】:

    Apache 是一个大型、丰富、强大和复杂的网络服务器——你可以配置所有东西半,有许多插件模块(所有各种mod_thismod_that 等等)等等。这很好,但当然也有更小、更轻的网络服务器的利基——lighttpd(你的樱桃引用提到)就是一个例子,专注于速度和简单性; cherrypy 是另一个,专注于简单性和 Python 支持。

    当然,您仍然可以配置多个方面,请参阅the tutorial section 关于配置文件的简要概述,reference 了解更多详细信息——但它不会像 Apache 那样丰富(嘿,很少有网络服务器是,除了 IIS;-)。可能你觉得缺少的一些配置选项可以很容易地用 Python 代码来弥补,但不是全部——这就是为什么你可能想在其他服务器“后面”运行cherrypy!

    编写 Python Web 应用程序的方式不必受所使用的 Web 服务器的限制:只需按照 WSGI 标准进行编程(这就是当今几乎所有 Web 应用程序框架都支持的),以及您的部署选项是无限的——从cherrypy,甚至只是Python标准库附带的reference wsgi implementation(仅推荐用于开发!-),一直到带有mod_wsgi的Apache,IIS,甚至是Google App Engine(它支持WSGI 也是!-)。

    【讨论】:

      【解决方案2】:

      那我该如何连接到我的数据库服务器呢?如何配置自定义 url 和目录保护等内容(很像我在 Apache 中所做的)?

      您仍然有一个单独的数据库服务器,例如 Postgres 或 MySQL。您的接口可以是 Python 数据库接口之一,也可以是 ORM,例如 PHP。执行自定义 URL 之类的操作由框架处理。我无法评论 CherryPy,但在 Pylons 中有一个配置路由的类,在 routing.py 中配置。

      想想这样的区别:

      当您的 Web 服务器调用 *.php 时,需要输入像 Symfony 这样的 PHP 框架。这就是你的应用程序的接口:Symfony 创建一个index.php,它在被调用时会初始化不同的框架服务,比如路由和ORM。它解析 URI 并确定哪个控制器/动作对应该接收请求。

      Python 框架(如 Pylons)带有一个 Web 服务器——一个在配置的端口上侦听 HTTP 请求的应用程序。该服务器在收到请求时会执行相同的操作。它创建一个数据库连接并使用为您的应用程序配置的路由映射来确定将请求发送到何处。与 PHP 框架不同,它还会检查 URI 是否引用了静态文件,如果配置为这样做,则返回该文件。在 Apache 权限范围内的 LAMP 环境中。

      【讨论】:

      • CherryPy 将类和方法结构镜像为路径(即,myclassone.some_method(...) 可能映射到 /one/some_methodmyclasstwo.some_other_method(...) 可能映射到 /two/some_other_method)。它比这更复杂,但希望你能明白。
      【解决方案3】:

      可以使用 mod_wsgi 之类的东西将 httpd 连接到您的 Python 应用程序,但 Python 本身功能强大,可以在其中编写 Web 服务器(甚至是 a database),甚至 Python 标准库包括一些可以使用或扩展的简单服务器。

      【讨论】:

        【解决方案4】:

        “应用程序本身内部的网络服务器”——这意味着同一个 python 进程处理服务器静态文件(HTML、CSS、图像等)的传统网络服务器角色以及生成动态应用程序产生的内容。因此,例如,python 进程本身会监听到端口 80 的浏览器连接,而不是让单独的 Web 服务器进程处理整个 Web 应用程序功能的那部分。

        【讨论】:

          【解决方案5】:

          我认为,如果您阅读 Django 教程,会更清楚一点。

          本质上,有一个用于开发的内置 Web 服务器。然后,您可以将您的项目移动到“真实”环境,而无需对其进行更改(或至少很少更改)。数据库也是如此,您可以从使用 sqlite 开始,当您想要部署应用程序时,您可以更改为另一个数据库,例如 MySQL。只需更改一些配置即可轻松完成。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-13
            相关资源
            最近更新 更多