使用Python的Bottle框架写一个简单的服务接口的示例


Posted in Python onAugust 25, 2015

是不是有这么一个场景,对外提供一堆数据或者是要返回给用户一个结果。但是不想把内部的一些数据和逻辑暴露给对方。。。简单点来说,就是想以服务的方式对外提供一个接口。对于这种有很多处理方式,RPC,搭建一个web服务啥的。。。。但是这些毕竟都太重量级了,操作起来很麻烦。我这里给出的一种非常easy的方式来处理。使用bottle解决问题。

需求: 检查一个zookeeper服务中的某些节点是否存在,如果存在返回OK,不存在则给出不存的节点信息。要求返回的信息是和pyunit的结果信息一致。

实现环境:

    1.  python 2.7  以及自带的pyunit
    2.  bottle          作为一个python的简易服务器     

pip  install    bottle

    3.  kazoo         一个python的zookeeper客户端  

pip install kazoo

1. 创建一个python的测试类 zk_check.py

-*- coding: utf-8 -*-                                                                             
                                         
  from kazoo.client import KazooClient                     
  import unittest                               
  class zktest(unittest.TestCase):                       
    def runTest(self):                            
      zknamespace = “/app/zktest_performance_1”               
      zkhosts = “127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183”  
      ZKTEST_DRIVERS = [“ip1”, “ip2”]      
      ZKTEST_NODES = [“ip3”, “ip4”, “ip5”, “ip6”]
                                         
      driverChildren = []                         
      nodeChildren = []                          
      badDrivers = []                           
      badNodes = []                            
      # checking                              
      zk = KazooClient(hosts=zkhosts, read_only=True)           
      zk.start()                              
      driverFatherPath = zknamespace + “/status/drivers”          
      nodeFatherPath = zknamespace + “/status/nodes”                                      
                          
      if zk.exists(driverFatherPath):                   
        driverChildren = zk.get_children(driverFatherPath)        
        if len(driverChildren) >                                                 
   
          for driver in zktest_DRIVERS:                 
            if driver not in driverChildren:             
              badDrivers.append(driver)                                   
                                         
      if zk.exists(nodeFatherPath):                    
        nodeChildren = zk.get_children(nodeFatherPath)          
        if len(nodeChildren) >                                                 
   
          for node in zktest_NODES:                   
            if node not in nodeChildren:               
              badNodes.append(node)                                                                        
      zk.stop()
      if (len(badNodes)==0) and (len(badDrivers)==0):           
        self.assertEquals(1,1,”pass”)                  
      else:                                
        if len(badDrivers) > 0:                     
          self.assertEquals(1,2,'len : %d , error : %s' % (len(badDrivers),badDrivers))
        if len(badNodes) > 0:                      
          self.assertEquals(1,2,'len : %d , error : %s' % (len(badNodes),badNodes))                                       
  if __name__ == ‘__main__':                          
    unittest.main()

2. 写一个bottle服务,将结果输出

import commands                                                                                  
  from bottle import route, run, template                    
  @route(‘/alisa')                               
   def index():                                 
     command = “python /Users/metaboy/script/zk_check.py”         
   
     #output = os.popen(command)                        
     return template(‘<b>{{text}}</b>', text=commands.getoutput(command))                         
                                          
  run(host='localhost', port=8888)

3. 后台启动bottle服务,提供外部访问ip

现在可以直接通过  http://localhost:8888/alisa   进行访问。

Python 相关文章推荐
python实现simhash算法实例
Apr 25 Python
在Python中操作字符串之startswith()方法的使用
May 20 Python
用python写的一个wordpress的采集程序
Feb 27 Python
python处理xml文件的方法小结
May 02 Python
Python多线程实现同步的四种方式
May 02 Python
详谈python3中用for循环删除列表中元素的坑
Apr 19 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
Sep 05 Python
Python Numpy库常见用法入门教程
Jan 16 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
python Django框架快速入门教程(后台管理)
Jul 21 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 #Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 #Python
Python中for循环和while循环的基本使用方法
Aug 21 #Python
Python中条件判断语句的简单使用方法
Aug 21 #Python
Python编程中的异常处理教程
Aug 21 #Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 #Python
约瑟夫问题的Python和C++求解方法
Aug 20 #Python
You might like
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
奇妙的js
2007/09/24 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
js实现二级导航功能
2017/03/03 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
Python编写屏幕截图程序方法
2015/02/18 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
Python编程快速上手——疯狂填词程序实现方法分析
2020/02/29 Python
美国在线印刷公司:PsPrint
2017/10/12 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
大学军训感言200字
2014/02/26 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
师德师风自查材料
2014/10/14 职场文书
学校运动会简讯
2015/07/20 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
基于Python实现对比Exce的工具
2022/04/07 Python