CherryPy框架基础教程:快速构建Python Web应用

CherryPy框架基础教程:快速构建Python Web应用

【免费下载链接】cherrypy CherryPy is a pythonic, object-oriented HTTP framework. https://cherrypy.dev 【免费下载链接】cherrypy 项目地址: https://gitcode.com/gh_mirrors/ch/cherrypy

概述

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的核心概念:

  1. 应用类:通常继承自object,包含处理请求的方法
  2. 暴露装饰器@cherrypy.expose标记可被访问的方法
  3. 快速启动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提供两种日志记录器:

  1. 访问日志:记录所有HTTP请求
  2. 错误日志:记录应用错误和消息

基本日志使用

# 记录普通消息
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']}"

会话存储后端

  1. 文件系统存储
tools.sessions.storage_class = cherrypy.lib.sessions.FileSession
tools.sessions.storage_path = "/path/to/sessions"
  1. 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开发的入门框架,也能满足生产环境中对性能有要求的场景。

【免费下载链接】cherrypy CherryPy is a pythonic, object-oriented HTTP framework. https://cherrypy.dev 【免费下载链接】cherrypy 项目地址: https://gitcode.com/gh_mirrors/ch/cherrypy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值