使用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字符串的encode与decode研究心得乱码问题解决方法
Mar 23 Python
python中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
详解Python中列表和元祖的使用方法
Apr 25 Python
Python迭代和迭代器详解
Nov 10 Python
Python Web框架之Django框架Model基础详解
Aug 16 Python
Python爬取腾讯视频评论的思路详解
Dec 19 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
Tensorflow分批量读取数据教程
Feb 07 Python
在python中修改.properties文件的操作
Apr 08 Python
jupyter notebook实现显示行号
Apr 13 Python
Python  word实现读取及导出代码解析
Jul 09 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 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中常用数组处理方法实例分析
2008/08/30 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
php 函数使用方法与函数定义方法
2010/05/09 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
PHP中list方法用法示例
2016/12/01 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
js电话号码验证方法
2015/09/28 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
2020/10/12 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
先进集体申报材料
2014/12/25 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python