使用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 相关文章推荐
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
学生信息管理系统Python面向对象版
Jan 30 Python
python 环境搭建 及python-3.4.4的下载和安装过程
Jul 20 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
Python3和PyCharm安装与环境配置【图文教程】
Feb 14 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
python音频处理的示例详解
Dec 23 Python
python实现图片转字符画
Feb 19 Python
Python可视化神器pyecharts之绘制箱形图
Jul 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四种基础算法代码实例
2013/10/29 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
JS实现div内部的文字或图片自动循环滚动代码
2013/04/19 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
vue.js学习笔记:如何加载本地json文件
2017/01/17 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
javascript input输入框模糊提示功能的实现
2017/09/25 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
python面向对象 反射原理解析
2019/08/12 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
英国计算机商店:Technextday
2019/12/28 全球购物
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
经典婚礼主持开场白
2014/03/13 职场文书
给小学生的新年寄语
2014/04/04 职场文书
七夕情人节促销方案
2014/06/07 职场文书
pycharm无法导入lxml的解决办法
2021/03/31 Python
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android