CherryPy中文文档-基础知识2
来源:互联网 发布:知乎媒体开放日 编辑:程序博客网 时间:2024/06/08 11:44
配置
CherryPy具有更细致的配置机制,可以在各个层次设置不同的配置
全局服务器配置
要配置HTTP和应用程序服务器, 请使用cherrypy.config.update() 方法。
cherrypy.config.update({'server.socket_port': 9090})
该cherrypy.config对象是一个字典,update方法将传入的字典合并到其中
你也可以传递一个文件(假设一个server.conf文件):
server.socket_port: 9090
cherrypy.config.update("server.conf")
警告
cherrypy.config.update() 不是用于配置应用程序。这是一个常见的错误。 他用于配置服务器和引擎。
单独应用程序配置
要配置单独的应用程序, 在应用程序与服务器关联时,传入配置字典或文件。
cherrypy.quickstart(myapp, '/', {'/': {'tools.gzip.on': True}})
或通过文件(例如文件app.conf)
tool.gzip.on: True
cherrypy.quickstart(myaoo, '/', 'app.conf')
可以以全局的方式定义大部分配置,但是有必要在代码中定义应用程序的位置。
class Root(object): @cherrypy.expose @cherrypy.tools.gzip() def index(self): return "hello world!"
上面示例的不同写法:
class Root(object): @cherrypy.expose def index(self): return "hello world!" index._cp_config = {'tools.gzip.on': True}
额外的应用程序设置
你可以添加不特定于某个URL的配置, 并从处理程序中索引他们,如下所示
tools.gzip.on: True
key = "..."appid = "..."
class Root(object): @cherrypy.expose def index(self): google_appid = cherrypy.request.app.config['googleapi']['appid'] return "hello world!"cherrypy.quickstart(Root(), '/', "app.conf")
Cookies
CherryPy使用Python模块 Cookie,Cookie.SimpleCookie对象来处理cookie
要将cookie发送至浏览器, 使用 cherrypy.response.cookie[key] = value
要提取浏览器的cookie, 使用 cherrypy.request.cookie[key]
要删除cookie(在客户端), 必须将cookie的过期时间设置为0:
cherrypy.response.cookie[key] =valuecherrypy.response.cookie[key]['expires'] = 0
因此每次都要设置cherrypy.request.cookie。但服务器不需要每次响应都发送相同的cookie;因此,
cherrypy.response.cookie通常是空的。所以,当你希望“删除”(到期)Cookie时,必须先设置 cherrypy.response.cookie[key] = value,
然后将其 expires 属性设置为0。
示例:
import cherrypyclass MyCookieApp(object): @cherrypy.expose def set(self): cookie = cherrypy.response.cookie cookie['cookieName'] = 'cookieValue' cookie['cookieName']['path'] = '/' cookie['cookieName']['max-age'] = 3600 cookie['cookieName']['version'] = 1 return "<html><body>Hello, I just sent you a cookie</body></html>" @cherrypy.expose def read(self): cookie = cherrypy.request.cookie res = """<html><body>Hi, you sent me %s cookies.<br /> Here is a list of cookie names/values:<br />""" % len(cookie) for name in cookie.keys(): res += "name: %s, value: %s<br>" % (name, cookie[name].value) return res + "</body></html>"if __name__ == '__main__': cherrypy.quickstart(MyCookieApp(), '/cookie')
使用 sessions
sessions是开发人员用来识别用户并同步其活动的常用机制之一。默认情况下,CherryPy不会激活sessions,因为他不是必须的功能,要开启需要在配置中添加以下设置:
tools.sessions.on: True
cherrypy.quickstart(myapp, '/', "app.conf")
默认情况下,sessions储存在RAM中,因此,如果重启服务器,会丢失当前所有sessions。你可以将他们储存
在memcached或文件系统中。
如下示例,在应用程序中使用sessions:
import cherrypy@cherrypy.exposedef index(self): if 'count' not in cherrypy.session: cherrypy.session['count'] = 0 cherrypy.session['count'] += 1
在这段代码中,每次调用索引页面,当前用户的sessions都会有一个“count”键增加1.
CherryPy通过检查请求中发送的cookie,知道要使用哪一个sessions
文件系统后端
使用文件系统很简单,在重新启动时不会丢失sessions。每个sessions都保存在给定目录中的文件中
tools.sessions.on:True tools.sessions.storage_class = cherrypy.lib.sessions.FileSession tools.sessions.storage_path = “/ some / directory”
Memcached后端
Memcached是一个的在RAM之上的分布式缓存系统, 如果你想在运行CherryPy的进程之外共享sessions,他是一个很好的选择。需要安装Python的 memcached包。
tools.sessions.on:True tools.sessions.storage_class = cherrypy.lib.sessions.MemcachedSession
其他后端
其他很多库也可以实现sessions后端。简单的子类cherrypy.lib.sessions.Session 并将子类表示为tools.sessions.storage_class.原文:Any other library may implement a session backend. Simply subclass cherrypy.lib.sessions.Session and indicate that subclass as tools.sessions.storage_class.
静态文件服务
CherryPy可以为你的静态内容(如图像, JavaScript和CSS文件等)提供服务。
注意:CherryPy使用mimetypes模块来确定特定资源的最佳类型。如果选择无效,你可以简单的设置更多的媒体类型,如下所示
import mimetypesmimetypes.types_map['.csv'] = 'text/csv'
提供单个文件
以下方式提供单个文件:
[/style.css] tools.staticfile.on = True tools.staticfile.filename = “/home/site/style.css”
提供整个目录
提供整个目录类似于单个文件:[/ static] tools.staticdir.on = True tools.staticdir.dir = “/ home / site / static”
假设你有一个静态/js/my.js文件, CherryPy将自动响应http://hostname/static/js/my.js等URL
注意:
CherryPy总是需要对他所服务的文件或目录提供绝对路径。如果有多个要配置的静态部分,但位于同一根目录中,则可以使用以下快捷方式:
[/] tools.staticdir.root = “/ home / site” [/ static] tools.staticdir.on = True tools.staticdir.dir = “static”
指定一个索引文件
默认情况下,CherryPy将对静态文件所在目录的根目录进行响应, 404错误表示“/”未找到,要指定索引,可以使用:
[/ static] tools.staticdir.on = True tools.staticdir.dir = “/ home / site / static” tools.staticdir.index = “index.html”
假设您在static / index.html上有一个文件,CherryPy将通过响应http://hostname / static /等URL返回其内容来。
允许文件下载
使用响应类型”application/x-download“,可以告诉浏览器,应该将资源下载到用户的机器上,而不是显示。
示例:
from cherrypy.lib.static import serve_file@cherrypy.exposedef download(self, filepath): return serve_file(filepath, "application/x-download", "attachment")
处理JSON
CherryPy内置支持了对JSON编码的请求或响应的解码支持。
解码 request
自动解码JSON请求的内容
class Root(object): @cherrypy.expose @cherrypy.tools.json_in() def index(self): data = cherrypy.request.json
附加在请求的JSON属性包含解码内容
编码response
使用JSON自动编码response的内容
class Root(object): @cherrypy.expose @cherrypy.tools.json_out() def index(self): return {'key': 'value'}
CherryPy将使用JSON对你的页面处理程序返回的任何内容进行编码, 并非所有类型的对象都可以被编码。
认证
CherryPy提供了两种非常简单的身份验证机制。两种描述如下RFC2617::基本和摘要。 他们最常见的出发方式是
出发浏览器弹出窗口向用户询问他们的名字和密码。
Basic
Basic身份验证是最简单的验证方式,但他不是一个安全的身份验证,因为用户的凭证被嵌入到请求中。我们建议不要使用它,
除非你在SSL或封闭的网络中运行。
from cherrypy.lib import auth_basicUSERS = {'jon': 'secret'}def validate_password(realm, username, password): if username in USERS and USERS[username] == password: return True return Falseconf = { '/protected/area': { 'tools.auth_basic.on': True, 'tools.auth_basic.realm': 'localhost', 'tools.auth_basic.checkpassword': validate_password }}cherrypy.quickstart(myapp, '/', conf)
该功能可以从任何来源读取数据:文件,数据库,内存等。
Digest
Digest认证的不同支出在于,凭证没有携带在请求中,因此他比Basic更安全。示例:
from cherrypy.lib import auth_digestUSERS = {'jon': 'secret'}conf = { '/protected/area': { 'tools.auth_digest.on': True, 'tools.auth_digest.realm': 'localhost', 'tools.auth_digest.get_ha1': auth_digest.get_ha1_dict_plain(USERS), 'tools.auth_digest.key': 'a565c27146791cfb' }}cherrypy.quickstart(myapp, '/', conf)
网站图标
CherryPy提供自己的红色cherrypy作为默认图标。你可以用以下方式提供自己的图标
import cherrypyclass HelloWorld(object): @cherrypy.expose def index(self): return "Hello World!"if __name__ == '__main__': cherrypy.quickstart(HelloWorld(), '/', { '/favicon.ico': { 'tools.staticfile.on': True, 'tools.staticfile.filename': '/path/to/myfavicon.ico' } } )
你也可以使用文件进行配置:
[/favicon.ico]tools.staticfile.on: Truetools.staticfile.filename: "/path/to/myfavicon.ico"
import cherrypyclass HelloWorld(object): @cherrypy.expose def index(self): return "Hello World!"if __name__ == '__main__': cherrypy.quickstart(HelloWorld(), '/', app.conf)
阅读全文
0 0
- CherryPy中文文档-基础知识2
- CherryPy中文文档-基础知识1
- CherryPy文档中文翻译
- cherrypy中文资料
- laravel5.2中文文档
- CherryPy architecture
- CherryPy 解析
- cherryPY 入门
- CherryPy 入门
- cherrypy简介
- YUI部分中文文档2
- YUI 中文文档(2)
- TinyXml 中文文档2.5.2
- Apache Log4j 2 中文文档
- Autumn中文文档2:控制器
- Magento 2中文文档教程
- Magento 2中文文档教程
- Magento 2中文文档教程
- Thinking in java-22 常量constant
- 【水杯测试】——面试会遇到的问题之一,转载自“labs”
- maven打Jar包
- Android 设备 arm 架构和 x86 架构的区别
- 关于递归 return none的问题
- CherryPy中文文档-基础知识2
- 欢迎使用CSDN-markdown编辑器
- 深入理解计算机系统笔记
- 两个合并两个字符串的稳定算法
- 论文读后总结1:一种对多元数据非监督异常点检测算法的对比评估
- 学习java的一些记录
- Hadoop实战学习(2)-日志清洗
- IOS Ui控件 修改位置和尺寸,代码添加控件
- 过滤器filter和拦截器interceptor的区别