前言

CherryPy是Python的一个Web框架,通过MethodDispatcher内建了对REST的支持,而且使用非常方便。

示例

首先,我们需要有一个符合REST风格的资源(Resource)。通过Python对象来定义:

import cherrypy

class ProgSnaps(object):
exposed=True def GET(self):
return "You access the REST api /ProgSap/GET"

接着,将配置里默认的Dispatcher修改为支持REST的MethodDispatcher:

conf = {'/':{'request.dispatch':cherrypy.dispatch.MethodDispatcher()}      }

最后,为CherryPy添加到资源的映射,启动服务器就可以通过url:http://localhost:8080/api/ProgSnaps 来访问了。

cherrypy.tree.mount(ProgSnaps(),"/api/ProgSnaps",conf)

注意事项

  1. 作为资源的Python对象必须是整个对象都exposed,通过设置一个对象的属性来实现,比如在ProgSnaps中设定exposed=true。非REST的情况下,都是在要暴露的方法上面添加@cherrypy.expose属性。
  2. REST的方法名必须都是大写的,比如GET,PUT,POST和DELETE。其它非大写的方法也可以定义在资源对象中,但是无法通过url访问到,可以作为实现REST方法(GET等)的辅助方法存在。比如例子中的getContent方法。
  3. 不需要自己定义http的allow头信息了,CherryPy根据资源对象中暴露的REST方法自动生成。比如本例中我们在ProgSnaps中定义了GET和PUT,那么最后http的头中会有这样的信息:

    Allow:GET, HEAD, UPDATE

    注:HEAD是默认添加的。REST总是允许访问HEAD信息。

完整代码

import cherrypy

class ProgSnaps(object):
exposed=True def GET(self):
#return "You access the REST api /ProgSap/GET"
return self.getContent("GET") def UPDATE(self):
return "You have accessed the REST api /ProgSap/UPDATE" def getContent(self,method):
return "You access the REST api /ProgSap/"+method conf = {
'/':{'request.dispatch':cherrypy.dispatch.MethodDispatcher()}
} if __name__ == '__main__':
cherrypy.tree.mount(ProgSnaps(),"/api/ProgSnaps",conf)
cherrypy.engine.start()
cherrypy.engine.block()

MethodDispatcher—Cherrypy对REST的支持的更多相关文章

  1. edwin报警和监控平台开源了(python源码)

    简单介绍一下edwin edwin是一个报警和监控平台, 可以使用它监控任意东西, 如有异常(分为警告级和严重级), 可以发出报警. 可以自定义报警的通知方式, 比如邮件/短信/电话. 另外, 它提供 ...

  2. cherrypy

    十多年来,Web 程序设计人员一直使用 CGI 将应用程序连接到 Web 服务器和另一端的 Web 浏览器.有很多理由建议使用 CGI:它可以与任何编程语言一起使用,并且它在 Web 服务器和宿主服务 ...

  3. 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore

    1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...

  4. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  5. Jexus 5.8.2 正式发布为Asp.Net Core进入生产环境提供平台支持

    Jexus 是一款运行于 Linux 平台,以支持  ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布,有如下更新: 1,现在大 ...

  6. 7.让网站支持http和https的访问方式

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#iis 怎么让网站在本地支持SSL?http://www.c ...

  7. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

  8. x:bind不支持样式文件 或 此Xaml文件必须又代码隐藏类才能使用{x:Bind} 解决办法

    这两天学习UWP开发,发现一个很有趣的问题,就是我题目中的描述的. 我习惯了在ResourceDictionary中写样式文件,但是发现用x:Bind时会有问题 如果是写在Style里,则提示 “x: ...

  9. .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?

    物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...

随机推荐

  1. gradients的一些注意点

    Each variable has a [.grad_fn] attribute that references a Function that has created the Variable(ex ...

  2. 一张图,关于 Bayes error rate,贝叶斯错误率等的分析

    造轮子是那帮搞研究的“科学家”干的事情(类似E&E里的explore),“工程师”的职责是利用已有的东西解决问题(类似E&E里的exploit). 其次,即使以工程师的角色解决业务问题 ...

  3. Git历险记(四)——索引与提交的幕后故事

    我想如果看过<Git历险记>的前面三篇文章的朋友可能已经知道怎么用git add,git commit这两个命令了:知道它们一个是把文件暂存到索引中为下一次提交做准备,一个创建新的提交(c ...

  4. 转:代码管理技巧——两步创建本地SVN服务器图文教程

    from: http://www.cnblogs.com/tianhonghui/archive/2012/07/22/2603454.html   当我们进行开发的时候,不论是独立开发还是处在团队中 ...

  5. UNP学习笔记(第六章 I/O复用)

    I/O模型 首先我们将查看UNIX下可用的5种I/O模型的基本区别: 1.阻塞式I/O 2.非阻塞式I/O 3.I/O复用(select和poll) 4.信号驱动式I/O(SIGIO) 5.异步I/O ...

  6. MySQL数据库 常用命令

    1.MySQL常用命令 create database name;创建数据库 use databasename;选择数据库 drop database name 直接删除数据库,不提醒 show ta ...

  7. 转 FreeBSD通过PORTS安装软件的几个常用命令

    1.怎样找到我想安装的包路径:# cd /usr/ports# make search name=mysql2.仅仅下载源码包,而不安装:# cd /usr/ports/directory# make ...

  8. vim diff 的使用

    vimdiff 是vim的比较工具可以对两个文件进行差异比较和快速合并 1. 使用vimdiff 比较两个文件 方式一 vimdiff  file_left  file_right   或者  vim ...

  9. RSA非对称算法实现HTTP密码加密传输

    目前一般帐号系统,都是https来传输账户性息,申请一个https证书也不贵.但是网站的其它功能并不需要走https协议,https和http混布比较麻烦,所以决定先实现一个http协议传输RSA非对 ...

  10. dede列表页调用文章,其实是所有页面都可以调用,第一次应用sql标签

    {dede:sql sql="SELECT aid,typeid,body,userip FROM `#@__addonarticle` where aid='6' or aid='7' o ...