使用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实现感知器模型、两层神经网络
Dec 19 Python
pandas 对series和dataframe进行排序的实例
Jun 09 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
python3通过selenium爬虫获取到dj商品的实例代码
Apr 25 Python
django foreignkey(外键)的实现
Jul 29 Python
python Django编写接口并用Jmeter测试的方法
Jul 31 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
Python3 使用pillow库生成随机验证码
Aug 26 Python
python字符串判断密码强弱
Mar 18 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
pytorch读取图像数据转成opencv格式实例
Jun 02 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 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/12/05 PHP
php下实现折线图效果的代码
2007/04/28 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
一段实用的php验证码函数
2016/05/19 PHP
php 常用的系统函数
2017/02/07 PHP
PHP实现图片压缩
2020/09/09 PHP
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
小程序中手机号识别的示例
2020/12/14 Javascript
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
Python内存管理实例分析
2019/07/10 Python
django和vue实现数据交互的方法
2019/08/21 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
如何理解python对象
2020/06/21 Python
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
节约每一滴水演讲稿
2014/09/09 职场文书
2014年营业员工作总结
2014/11/18 职场文书
学雷锋感言
2015/08/03 职场文书