使用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 07 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
python实现kNN算法
Dec 20 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
Mar 23 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
python中get和post有什么区别
Jun 19 Python
sklearn的predict_proba使用说明
Jun 28 Python
python神经网络学习 使用Keras进行简单分类
May 04 Python
全网非常详细的pytest配置文件
Jul 15 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最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
Firefox和IE浏览器兼容JS脚本写法小结
2008/07/07 Javascript
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
2019/07/31 Javascript
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
python实现12306火车票查询器
2017/04/20 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
使用numba对Python运算加速的方法
2018/10/15 Python
Python编程flask使用页面模版的方法
2018/12/28 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
使用npy转image图像并保存的实例
2020/07/01 Python
python 实现汉诺塔游戏
2020/11/28 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
Yahoo的PHP面试题
2014/05/26 面试题
Linux文件操作命令都有哪些
2016/07/23 面试题
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
销售人员工作自我评价
2014/09/21 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android