使用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统计单词出现的次数
Apr 04 Python
Python使用tkinter库实现文本显示用户输入功能示例
May 30 Python
python去除文件中重复的行实例
Jun 29 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
pytorch中的transforms模块实例详解
Dec 31 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
Python实现密钥密码(加解密)实例详解
Apr 26 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
用python对oracle进行简单性能测试
Dec 05 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
基于tensorflow权重文件的解读
May 26 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
PHP5/ZendEngine2的改进
2006/10/09 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
javascript加号&quot;+&quot;的二义性说明
2013/03/04 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
Python深入学习之上下文管理器
2014/08/31 Python
python监控文件并且发送告警邮件
2018/06/21 Python
python实现名片管理系统
2018/11/29 Python
PYTHON绘制雷达图代码实例
2019/10/15 Python
python中upper是做什么用的
2020/07/20 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
校优秀毕业生主要事迹
2014/05/26 职场文书
代办委托书怎么写
2014/08/01 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
大学生见习报告总结
2014/11/04 职场文书
先进基层党组织材料
2014/12/25 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书