CherryPy中文文档-基础知识1
来源:互联网 发布:mmd制作软件最新版 编辑:程序博客网 时间:2024/06/08 19:02
一分钟的应用实例:
你可以使用CherryPy编写的最基本的web应用程序,几乎涉及其所有核心概念。
import cherrypyclass Root(object): @cherrypy.expose def index(self): return "Hello World!"if __name__ == '__namin__': cherrypy.quickstart(Root(), '/')
重要的一点是。对于大多数任务而言,你不需要超过一行的import语句。如第一行所示。
在讨论他之前,我们先跳到第九行,他显示了如何使用CherrPy的服务器托管你的应用程序,
并在"/"路径上启用内置的HTTP服务器服务。
现在回到实际的应用程序,虽然CherryPy并没有强制要求,但是大部分时候应用程序将被编写为Python类。
CherryPy将调用这些类的方法来响应客户端请求。需要注意的是,类方法能被CherryPy调用,我们说该方法被暴露。
这正是装饰器cherrypy.expose()在第四行做的。
将上面这段代码保存在名为myapp.py的文件中,并运行他:
$ python myapp.py然后打开浏览器 http://127.0.0.1:8080
注意
CherryPy是一个专注于一个单一任务的小框架;接受HTTP请求,并找到与请求URL匹配的Python函数或方法。
与其他知名框架不同,CherrPy不提供对数据库访问,HTML模板或任何其他中间件功能的内置支持。
简而言之,CherryPy发现并调用一个被暴露的方法,由开发人员负责提供实现应用程序的逻辑。
警告
前面的例子展示了CherryPy接口的简单性,但是实际上你的应用程序可能还包含了其他几个部分:
静态文件、更复杂的结构、数据库访问等。
CherryPy是一个极小的框架,但不是一个简单的框架,他附带了一些基本的工具来实现您期待的常用功能。
托管一个或多个应用程序:
Web应用程序需要一个可访问的HTTP服务器。CherryPy提供自己的准备好的HTTP服务器。有两种方式来托管
应用程序。都很简单。
单一应用
最直接的方法是使用cherrypy.quickstart()功能。他需要至少一个参数,即应用程序的实例。另外还有两个可选参数。
第一个是应用程序可以访问的基本路径。第二个是一个配置字典或文件用来配置所托管的应用程序。
cherrpy.quickstart(Blog())cherrpy.quickstart(Blog(), '/blog')cherrpy.quickstart(Blog(), '/blog', {'/': {'tools.gzip.on': True}})
另外,最后一个例子为应用程序提供了具体的配置。
注意
请注意, 在第三种情况下,设置相对于应用程序,而不是在哪里可用, 所以是{'/': ...} 而不是{'/blog': ...}多个应用程序
cherrypy.quickstart()方法对于单个应用程序是好用的,但是缺乏使用服务器托管多个应用程序的能力。
要实现这一点,需要使用cherrypy.tree.mount 功能:
cherrypy.tree.mount(Blog(), '/blog', blog_conf)cherrypy.tree.mount(Forum(), '/forum', forum_conf)cherrypy.engine.start()cherrypy.engine.block()
本质上, cherrypy.tree.mount 使用和cherrypy.quickstart 相同的参数: 应用程序实例, 托管路径, 配置字典。 最后两行只是启动服务器
重要
cherrypy.quickstart() 和 cherrypy.tree.mount 并不是相互排斥的, 例如上面的行可以写成:
cherrypy.tree.mount(Blog(), '/blog', blog_conf)cherrypy.quickstart(Forum(), '/forum', forum_conf)
注意
日志
在任何应用程序中, 日志记录是一项重要任务。 CherryPy将记录所有传入的请求及错误。
为此, CherryPy管理着两个记录器:
一个记录每个传入请求的访问
一个跟踪错误或其他应用程序级的消息
你的应用程序可以通过调用来利用第二个记录器 cherrypy.log()。
cherrypy.log("你好")
try: ...except: cherrypy.log("kaboom!", traceback=True)
两个日志都写入你配置中下列两个键标识的文件中:
log.access_file 对传入请求使用通用日志格式
log.error_file 其他日志
禁用日志
cherrypy.config.update({'log.screen': False, 'log.access_file': '', 'log.error_file': ''})
使用其他日志记录工具
import loggingimport logging.configimport cherrypylogger = logging.getLogger()db_logger = logging.getLogger('db')LOG_CONF = { 'version': 1, 'formatters': { 'void': { 'format': '' }, 'standard': { 'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s' }, }, 'handlers': { 'default': { 'level':'INFO', 'class':'logging.StreamHandler', 'formatter': 'standard', 'stream': 'ext://sys.stdout' }, 'cherrypy_console': { 'level':'INFO', 'class':'logging.StreamHandler', 'formatter': 'void', 'stream': 'ext://sys.stdout' }, 'cherrypy_access': { 'level':'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'formatter': 'void', 'filename': 'access.log', 'maxBytes': 10485760, 'backupCount': 20, 'encoding': 'utf8' }, 'cherrypy_error': { 'level':'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'formatter': 'void', 'filename': 'errors.log', 'maxBytes': 10485760, 'backupCount': 20, 'encoding': 'utf8' }, }, 'loggers': { '': { 'handlers': ['default'], 'level': 'INFO' }, 'db': { 'handlers': ['default'], 'level': 'INFO' , 'propagate': False }, 'cherrypy.access': { 'handlers': ['cherrypy_access'], 'level': 'INFO', 'propagate': False }, 'cherrypy.error': { 'handlers': ['cherrypy_console', 'cherrypy_error'], 'level': 'INFO', 'propagate': False }, }}class Root(object): @cherrypy.expose def index(self): logger.info("boom") db_logger.info("bam") cherrypy.log("bang") return "hello world"if __name__ == '__main__': cherrypy.config.update({'log.screen': False, 'log.access_file': '', 'log.error_file': ''}) cherrypy.engine.unsubscribe('graceful', cherrypy.log.reopen_files) logging.config.dictConfig(LOG_CONF) cherrypy.quickstart(Root())
这段代码中,我们创建了一个配置字典,传递给logging模块来配置我们的记录器:
- CherryPy中文文档-基础知识1
- CherryPy中文文档-基础知识2
- CherryPy文档中文翻译
- cherrypy中文资料
- web framework---cherrypy学习笔记1
- freemaker中文文档(1)
- CherryPy architecture
- CherryPy 解析
- cherryPY 入门
- CherryPy 入门
- cherrypy简介
- YUI部分中文文档1
- YUI 中文文档(1)
- flex4.1中文帮助文档
- spring 3.0.1 中文文档
- pgsql8.1中文文档截取
- 基础知识---文档对象模型
- ElasticSearch基础知识--检索文档
- 定时任务
- Scala基础—偏函数的示例
- 13. 压缩文本
- 百度贾磊LSTM+CTC详解
- 常用FFMPEG命令
- CherryPy中文文档-基础知识1
- Android edittext 禁止复制粘贴问题解决方案
- STL之deque容器详解
- 14. 逻辑行计数
- 菜鸡的成长第一弹 ———— tomcat启动的各种错误
- 15. 数字游戏
- leetcode 85. Maximal Rectangle
- 05、react之 条件判断的四种写法
- 35. OP-TEE中基本算法接口调用实现