- CherryPy 教程
- CherryPy - 首页
- CherryPy - 简介
- CherryPy - 环境搭建
- CherryPy - 词汇表
- 内置HTTP服务器
- CherryPy - 工具箱
- CherryPy - 一个可运行的应用程序
- CherryPy - Web 服务
- CherryPy - 表现层
- CherryPy - Ajax 的使用
- CherryPy - 演示应用程序
- CherryPy - 测试
- 应用程序部署
- CherryPy 有用资源
- CherryPy - 快速指南
- CherryPy - 有用资源
- CherryPy - 讨论
内置HTTP服务器和内部引擎
CherryPy 自带 Web (HTTP) 服务器。这就是 CherryPy 自包含的原因,它允许用户在获得库后的几分钟内运行 CherryPy 应用程序。
Web 服务器充当应用程序的网关,借助它可以跟踪所有请求和响应。
要启动 Web 服务器,用户必须进行以下调用:
cherryPy.server.quickstart()
CherryPy 的内部引擎负责以下活动:
- 创建和管理请求和响应对象。
- 控制和管理 CherryPy 进程。
CherryPy – 配置
该框架自带配置系统,允许您为 HTTP 服务器设置参数。配置设置可以存储在语法类似于 INI 格式的文本文件中,也可以存储为完整的 Python 字典。
要配置 CherryPy 服务器实例,开发者需要使用设置的全局部分。
global_conf = { 'global': { 'server.socket_host': 'localhost', 'server.socket_port': 8080, }, } application_conf = { '/style.css': { 'tools.staticfile.on': True, 'tools.staticfile.filename': os.path.join(_curdir, 'style.css'), } } This could be represented in a file like this: [global] server.socket_host = "localhost" server.socket_port = 8080 [/style.css] tools.staticfile.on = True tools.staticfile.filename = "/full/path/to.style.css"
HTTP 兼容性
CherryPy 一直在缓慢发展,但它包含 HTTP 规范的编译,支持 HTTP/1.0,后来转移到支持 HTTP/1.1。
CherryPy 被认为是条件性地兼容 HTTP/1.1,因为它实现了所有必须和必需的级别,但并非规范的所有应该级别。因此,CherryPy 支持 HTTP/1.1 的以下功能:
如果客户端声称支持 HTTP/1.1,则必须在使用指定协议版本发出的任何请求中发送标头字段。如果没有这样做,CherryPy 将立即停止处理请求。
CherryPy 生成一个在所有配置中使用的 Date 标头字段。
CherryPy 可以处理带有客户端支持的响应状态码 (100)。
CherryPy 的内置 HTTP 服务器支持持久连接,这是 HTTP/1.1 中的默认设置,通过使用 Connection: Keep-Alive 标头实现。
CherryPy 正确处理分块请求和响应。
CherryPy 通过两种不同的方式处理请求:If-Modified-Since 和 If-Unmodified-Since 标头,并根据请求相应地发送响应。
CherryPy 允许任何 HTTP 方法。
CherryPy 处理客户端和服务器设置之间 HTTP 版本的组合。
多线程应用程序服务器
CherryPy 基于多线程概念设计。每次开发者在 CherryPy 命名空间中获取或设置值时,都是在多线程环境中完成的。
cherrypy.request 和 cherrypy.response 都是线程数据容器,这意味着您的应用程序可以独立地调用它们,而知道在运行时哪些请求通过它们进行代理。
使用线程模式的应用程序服务器并不被高度重视,因为线程的使用被认为会由于同步需求而增加问题的可能性。
其他替代方案包括:
多进程模式
每个请求由其自身的 Python 进程处理。在这里,可以认为服务器的性能和稳定性更好。
异步模式
在这里,接受新连接并将数据发回客户端与请求进程异步进行。这种技术以其效率而闻名。
URL 分发
CherryPy 社区希望更灵活,并且其他分发器解决方案将受到赞赏。CherryPy 3 提供了其他内置分发器,并提供了一种编写和使用您自己的分发器的简单方法。
- 用于开发 HTTP 方法的应用程序。(GET、POST、PUT 等)
- 定义 URL 中路由的路由分发器
HTTP 方法分发器
在某些应用程序中,URI 与服务器要对资源执行的操作无关。
例如,http://xyz.com/album/delete/10
URI 包含客户端希望执行的操作。
默认情况下,CherryPy 分发器将以以下方式映射:
album.delete(12)
上述分发器已正确提及,但可以通过以下方式独立完成:
http://xyz.com/album/10
用户可能会想知道服务器如何分发确切的页面。此信息由 HTTP 请求本身携带。当客户端向服务器发出请求时,CherryPy 会查找最合适的处理程序,该处理程序是 URI 目标资源的表示。
DELETE /album/12 HTTP/1.1
路由分发器
以下是分发方法所需参数的列表:
name 参数是连接路由的唯一名称。
route 是匹配 URI 的模式。
controller 是包含页面处理程序的实例。
使用路由分发器连接匹配 URI 的模式并关联特定的页面处理程序。
示例
让我们来看一个例子来理解它是如何工作的:
import random import string import cherrypy class StringMaker(object): @cherrypy.expose def index(self): return "Hello! How are you?" @cherrypy.expose def generate(self, length=9): return ''.join(random.sample(string.hexdigits, int(length))) if __name__ == '__main__': cherrypy.quickstart(StringMaker ())
按照以下步骤获取上述代码的输出:
步骤 1 - 将上述文件保存为 tutRoutes.py。
步骤 2 - 访问以下 URL:
https://127.0.0.1:8080/generate?length=10
步骤 3 - 您将收到以下输出: