使用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获取网页上图片下载地址的方法
Mar 11 Python
Python使用django获取用户IP地址的方法
May 11 Python
详解Python3中yield生成器的用法
Aug 20 Python
Python 中迭代器与生成器实例详解
Mar 29 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
python如何重载模块实例解析
Jan 25 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
详解Python下ftp上传文件linux服务器
Jun 21 Python
python使用正则表达式来获取文件名的前缀方法
Oct 21 Python
python退出命令是什么?详解python退出方法
Dec 10 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 Python
pandas中DataFrame数据合并连接(merge、join、concat)
May 30 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
在线短消息收发的程序,不用数据库
2006/10/09 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
javascript 特殊字符串
2009/02/25 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
Python函数中定义参数的四种方式
2014/11/30 Python
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
用Python设计一个经典小游戏
2017/05/15 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
tensorflow如何批量读取图片
2019/08/29 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
家庭户外服装:Hawkshead
2017/11/02 全球购物
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
车间调度岗位职责
2013/11/30 职场文书
花店创业计划书范文
2014/02/07 职场文书
关于元旦的广播稿
2014/02/16 职场文书
《愚公移山》教学反思
2014/02/20 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python