使用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实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
python选择排序算法实例总结
Jul 01 Python
Python3.2模拟实现webqq登录
Feb 15 Python
Python中functools模块函数解析
Mar 12 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
Python统计单词出现的次数
Apr 04 Python
python 返回列表中某个值的索引方法
Nov 07 Python
Laravel框架表单验证格式化输出的方法
Sep 25 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 Python
Python加速程序运行的方法
Jul 29 Python
Python机器学习之PCA降维算法详解
May 19 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之第五天
2006/10/09 PHP
php的字符串用法小结
2010/06/08 PHP
屏蔽机器人从你的网站搜取email地址的php代码
2012/11/14 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
nodejs前端模板引擎swig入门详解
2018/05/15 NodeJs
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
python如何统计代码运行的时长
2019/07/24 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
python help函数实例用法
2020/12/06 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
班主任班级寄语大全
2014/04/04 职场文书
教师产假请假条
2014/04/10 职场文书
幼儿园六一亲子活动方案
2014/08/26 职场文书
国际贸易实训报告
2014/11/05 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书