CherryPy框架基础教程:快速构建Python Web应用
概述
CherryPy是一个轻量级的Python Web框架,它遵循"少即是多"的设计哲学。与其他全栈框架不同,CherryPy专注于HTTP请求处理的核心功能,将其他功能如数据库访问、模板渲染等留给开发者自行选择。本文将详细介绍CherryPy的基础知识,帮助开发者快速上手。
一分钟创建CherryPy应用
让我们从一个最简单的CherryPy应用开始:
import cherrypy
class Root(object):
@cherrypy.expose
def index(self):
return "Hello World!"
if __name__ == '__main__':
cherrypy.quickstart(Root(), '/')
这个例子展示了CherryPy的核心概念:
- 应用类:通常继承自
object,包含处理请求的方法 - 暴露装饰器:
@cherrypy.expose标记可被访问的方法 - 快速启动:
cherrypy.quickstart()一键启动应用服务器
保存为myapp.py后运行,访问http://127.0.0.1:8080即可看到"Hello World!"。
应用部署方式
单应用部署
使用cherrypy.quickstart()是最简单的部署方式:
# 根路径部署
cherrypy.quickstart(Blog())
# 指定路径部署
cherrypy.quickstart(Blog(), '/blog')
# 带配置部署
cherrypy.quickstart(Blog(), '/blog', {'/': {'tools.gzip.on': True}})
多应用部署
需要同时部署多个应用时,使用mount方法:
cherrypy.tree.mount(Blog(), '/blog', blog_conf)
cherrypy.tree.mount(Forum(), '/forum', forum_conf)
cherrypy.engine.start()
cherrypy.engine.block()
日志管理
CherryPy提供两种日志记录器:
- 访问日志:记录所有HTTP请求
- 错误日志:记录应用错误和消息
基本日志使用
# 记录普通消息
cherrypy.log("hello there")
# 记录异常
try:
...
except Exception:
cherrypy.log("error occurred!", traceback=True)
日志配置
# 禁用日志
cherrypy.config.update({
'log.screen': False,
'log.access_file': '',
'log.error_file': ''
})
与标准logging模块集成
import logging
import logging.config
LOG_CONF = {
'version': 1,
'handlers': {
'cherrypy_access': {
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'access.log',
'maxBytes': 10485760,
'backupCount': 20
}
},
'loggers': {
'cherrypy.access': {
'handlers': ['cherrypy_access'],
'level': 'INFO'
}
}
}
logging.config.dictConfig(LOG_CONF)
配置管理
全局服务器配置
# 更新端口配置
cherrypy.config.update({'server.socket_port': 9090})
# 从文件加载配置
cherrypy.config.update("server.conf")
应用级配置
# 通过字典配置
cherrypy.quickstart(myapp, '/', {'/': {'tools.gzip.on': True}})
# 通过文件配置
cherrypy.quickstart(myapp, '/', "app.conf")
方法级配置
class Root:
@cherrypy.expose
@cherrypy.tools.gzip()
def index(self):
return "hello world!"
# 或使用_cp_config属性
def other(self):
return "hello again!"
other._cp_config = {'tools.gzip.on': True}
Cookie处理
CherryPy使用Python的Cookie模块处理cookie:
# 设置cookie
cherrypy.response.cookie['key'] = 'value'
cherrypy.response.cookie['key']['expires'] = 3600 # 1小时过期
# 读取cookie
value = cherrypy.request.cookie['key'].value
# 删除cookie
cherrypy.response.cookie['key'] = 'value'
cherrypy.response.cookie['key']['expires'] = 0
会话管理
启用会话
[/]
tools.sessions.on: True
使用会话
@cherrypy.expose
def index(self):
if 'count' not in cherrypy.session:
cherrypy.session['count'] = 0
cherrypy.session['count'] += 1
return f"访问次数: {cherrypy.session['count']}"
会话存储后端
- 文件系统存储:
tools.sessions.storage_class = cherrypy.lib.sessions.FileSession
tools.sessions.storage_path = "/path/to/sessions"
- Memcached存储:
tools.sessions.storage_class = cherrypy.lib.sessions.MemcachedSession
静态文件服务
CherryPy可以方便地提供静态文件服务:
class StaticServer:
@cherrypy.expose
def index(self):
return open('static/index.html')
if __name__ == '__main__':
conf = {
'/static': {
'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.abspath('./static')
}
}
cherrypy.quickstart(StaticServer(), '/', conf)
总结
CherryPy作为一个轻量级框架,提供了构建Web应用所需的核心功能。通过本文介绍的基础知识,开发者可以快速搭建起一个简单的Web应用。CherryPy的简洁设计使得它非常适合作为学习Web开发的入门框架,也能满足生产环境中对性能有要求的场景。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



