Python中“嵌入式Web服务器在Web应用中的”是什么?

0 投票
5 回答
569 浏览
提问于 2025-04-16 01:16

CherryPy的说明是:

使用CherryPy构建的网页应用其实是独立的Python应用,它们自带一个多线程的网页服务器。你可以在任何可以运行Python应用的地方部署它们。你不需要Apache,但可以在Apache(或者lighttpd、IIS)后面运行CherryPy应用。CherryPy应用可以在Windows、Linux、Mac OS X以及任何支持Python的平台上运行。

我之前用过PHP,现在想学Python。在寻找可以用来开始Python网页开发的网页服务器时,我在StackOverflow上看到一个讨论。不过,经过一番搜索,我还是没找到合适的。看到一些说“Django有自己的轻量级网页服务器”和之前提到的CherryPy。

我现在困惑的是:我习惯用XAMPP,它有一个网页服务器、一个数据库服务器和我的应用,我无法想象“应用内部有一个网页服务器”这个概念。那么我该如何连接到我的数据库服务器呢?我该如何配置自定义网址和目录保护(就像我在Apache中做的那样)?

谢谢大家的帮助!

5 个回答

0

你可以用像 mod_wsgi 这样的工具把 httpd 和你的 Python 应用连接起来,但其实 Python 本身就很强大,完全可以用来写一个网络服务器(甚至还可以写一个 数据库)。而且,Python 的标准库里还包含了一些简单的服务器,可以直接用或者在此基础上进行扩展。

1

那我该如何连接到我的数据库服务器呢?我该如何配置一些东西,比如自定义网址和目录保护(就像我在Apache中做的那样)?

你还是需要一个单独的数据库服务器,比如Postgres或MySQL。你的接口可以使用Python的数据库接口,或者像PHP那样的ORM(对象关系映射)。至于自定义网址,这个是由框架来处理的。我对CherryPy不太了解,但在Pylons中,有一个类专门用来配置路由,这个配置是在routing.py文件中进行的。

可以这样理解它们之间的区别:

像Symfony这样的PHP框架,期望在你的网页服务器调用*.php时被启动。这就是你应用程序的接口:Symfony会创建一个index.php,当它被调用时,会初始化不同的框架服务,比如路由和ORM。它会解析网址,找出哪个控制器/动作组合应该处理这个请求。

而像Pylons这样的Python框架,自带一个网页服务器——这是一个监听特定端口的应用程序,负责处理HTTP请求。当这个服务器收到请求时,它也会做类似的事情。它会创建一个数据库连接,并使用为你的应用程序配置的路由图来决定将请求发送到哪里。与PHP框架不同的是,它还会检查网址是否指向一个静态文件,如果配置了,它会直接返回那个文件。在LAMP环境中,这个工作是由Apache来完成的。

2

Apache是一个功能强大、复杂的网页服务器,你可以配置很多东西,还有各种插件模块(像是mod_thismod_that等等)。这当然很好,但也有一些小巧、轻便的网页服务器,比如lighttpd(你提到的cherrypy就是一个例子),它注重速度和简单性;而cherrypy则更关注简单和对Python的支持。

当然,你还是可以配置一些方面,想了解更多可以看看关于配置文件的教程部分,还有更详细的参考资料。不过,cherrypy的配置选项没有Apache那么丰富(其实很少有网页服务器能比得上Apache,除了IIS可能算一个;-)。如果你觉得某些配置选项缺失,可能可以通过Python代码来弥补,但并不是所有的选项都能这样解决,这也是为什么你可能想把cherrypy放在其他服务器“后面”运行的原因!

你编写Python网页应用的方式不需要受到你使用的网页服务器的限制:只要按照WSGI标准编程(现在几乎所有的网页应用框架都支持这个标准),你的部署选择就非常多样化了——可以用cherrypy,甚至是Python标准库里自带的参考wsgi实现(这个只推荐用于开发!),也可以用Apache加上mod_wsgi,IIS,甚至是Google App Engine(它也支持WSGI!)。

撰写回答