使用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里disconnect UDP套接字的方法
Apr 23 Python
Python实现的购物车功能示例
Feb 11 Python
python如何压缩新文件到已有ZIP文件
Mar 14 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
django框架ModelForm组件用法详解
Dec 11 Python
python opencv如何实现图片绘制
Jan 19 Python
对python中return与yield的区别详解
Mar 12 Python
Python docutils文档编译过程方法解析
Jun 23 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
python切片作为占位符使用实例讲解
Feb 17 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
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
实现树状结构的两种方法
2006/10/09 PHP
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
用PHP实现的随机广告显示代码
2007/06/14 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
取选中的radio的值
2010/01/11 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
Python实现二维有序数组查找的方法
2016/04/27 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
Python中and和or如何使用
2020/05/28 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
新加坡交友网站:be2新加坡
2019/04/10 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
期中考试后的反思
2014/02/08 职场文书
初三学习决心书
2014/03/11 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
学校就业推荐信范文
2014/05/19 职场文书
文秘自荐信
2014/06/28 职场文书
高三语文复习计划
2015/01/19 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript