使用Python的Bottle框架写一个简单的服务接口的示例

是不是有这么一个场景,对外提供一堆数据或者是要返回给用户一个结果。但是不想把内部的一些数据和逻辑暴露给对方。。。简单点来说,就是想以服务的方式对外提供一个接口。对于这种有很多处理方式,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   进行访问。

(0)

相关推荐

  • 深入解析Python中的WSGI接口

    概述 WSGI接口包含两方面:server/gateway 及 application/framework. server调用由application提供的可调用对象. 另外在server和application之间还可能有一种称作middleware的中间件. 可调用对象是指:函数.方法.类或者带有callable方法的实例. 关于application 函数.方法.类及带有callable方法的实例等可调用对象都可以作为the application object. WSGI协议要求: th

  • 基于Python的接口测试框架实例

    背景 最近公司在做消息推送,那么自然就会产生很多接口,测试的过程中需要调用接口,我就突然觉得是不是可以自己写一个测试框架? 说干就干,由于现有的接口测试工具Jmeter.SoupUI等学习周期有点长,干脆自己写一个吧,不求人,所有功能自己都能一清二楚. 当然,写工具造轮子只是学习的一种方式,现成成熟的工具肯定比我们自己的写的好用. 开发环境 ------------------------------------------------------------- 操作系统:Mac OS X EI

  • 详解Python程序与服务器连接的WSGI接口

    了解了HTTP协议和HTML文档,我们其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作为HTTP响应的Body发送给浏览器: 浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示. 所以,最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回.Apache.Nginx.Lighttpd等这些常见的静态服务器就是干这件事情的. 如果要动

  • linux系统使用python监测网络接口获取网络的输入输出

    net.py 获取网络接口的输入和输出 复制代码 代码如下: #!/usr/bin/env Pythonimport timeimport sys if len(sys.argv) > 1: INTERFACE = sys.argv[1]else: INTERFACE = 'eth0'STATS = []print 'Interface:',INTERFACE def rx(): ifstat = open('/proc/net/dev').readlines() for interface i

  • Python+微信接口实现运维报警

    说到运维报警,我觉得都可以写个长篇历史来详细解释了报警的前世来生,比如最早报警都是用邮件,但邮件实时性不高,比如下班回家总不能人一直盯着邮箱吧,所以邮件这种报警方式不适合用来报紧急的故障,日常磁盘利用率监控什么的可以用它来报没问题,网站宕机不能访问这种故障,用它就明显不合适了,那对这种业务稳定性要求比较高的业务,后来就发展成了用短信,就是公司买个短信机,提供一个http接口,然后运维人员写脚本把收集到的异常数据写入文件,然后脚本实时检测如果这个文件不为空,就调用短信机接口把文件里的内容发送出去,

  • 使用python实现接口的方法

    接口基础知识: 简单说下接口测试,现在常用的2种接口就是http api和rpc协议的接口,今天主要说:http api接口是走http协议通过路径来区分调用的方法,请求报文格式都是key-value形式,返回报文一般是json串: 接口协议:http.webservice.rpc等. 请求方式:get.post方式 请求参数格式: a. get请求都是通过url?param=xxx&param1=xxx b. post请求的请求参数常用类型有:application/json.applicat

  • 在Python的框架中为MySQL实现restful接口的教程

    最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGate,可以使DBGate变为无状态的,方便横向扩展 当请求量或者存储量变大时,mysql需要做分库分表,DBGate可以内部直接处理,外界无感知 通过restful限制对数据请求的形式,仅支持简单的get/post/patch/put 进行增删改查,并不支持复杂查询.这个也是和游戏业务的特性有关,如果网站等需要复杂查询的业务,对此并不适合 DBGate使用多进程模式,方便控制与my

  • 使用Python的Bottle框架写一个简单的服务接口的示例

    是不是有这么一个场景,对外提供一堆数据或者是要返回给用户一个结果.但是不想把内部的一些数据和逻辑暴露给对方...简单点来说,就是想以服务的方式对外提供一个接口.对于这种有很多处理方式,RPC,搭建一个web服务啥的....但是这些毕竟都太重量级了,操作起来很麻烦.我这里给出的一种非常easy的方式来处理.使用bottle解决问题. 需求: 检查一个zookeeper服务中的某些节点是否存在,如果存在返回OK,不存在则给出不存的节点信息.要求返回的信息是和pyunit的结果信息一致. 实现环境:

  • 浅谈Python使用Bottle来提供一个简单的web服务

    介绍 今天有个不正经的需求,就是要快速做一个restful api的性能测试,要求测试在海量作业数据的情况下客户端分页获取所有作业的性能.因为只是一个小的的测试工作,所以就想到了Bottle框架作为Web服务器,这里就简单说说怎样使用Bottle框架. 安装 pip install bottle 启动服务 运行下面的python脚本即可启动一个Web服务. from bottle import route, run, request @route('/hello') def hello(): r

  • vue用Object.defineProperty手写一个简单的双向绑定的示例

    前言 上次写了一个Object.defineProperty() 不详解,文末说要写用它来写个双向绑定.说话算话,说来就来 前文链接 Object.defineProperty() 不详解 先看最后效果 model演示.gif 什么是双向绑定? 1.当一个对象(或变量)的属性改变,那么调用这个属性的地方显示也应该改变,模型到视图(model => view) 2.当调用属性的这个地方改变了这个属性(通常是一个表单元素),那么这个对象(或变量)的属性也会改为最新的值 ,即视图到模型(view =>

  • 使用Python的Twisted框架实现一个简单的服务器

    预览   twisted是一个被设计的非常灵活框架以至于能够让你写出非常强大的服务器.这种灵活的代价是需要好通过好几个层次来实现你的服务器, 本文档描述的是Protocol层,你将在这个层次中执行协议的分析和处理,如果你正在执行一个应用程序,那么你应该在读过top level的为twisted写插件一节中的怎样开始写twisted应用程序之后阅读本章.这个文档只是和TCP,SSL和Unix套接字服务器有关,同时也将有另一份文档专门讲解UDP.   你的协议处理类通常是twisted.intern

  • 使用Python的Tornado框架实现一个简单的WebQQ机器人

    我打算将WebQQ单独出来运行, 一开始直接拷贝了pyxmpp2的mainloop, 但是跑起来问题多多, 所以我又研究了利用Tornado进行网络编程(这里), 所以我放弃了Pyxmpp2的mainloop,使用Tornado进行重写 首先放出项目代码 引子 WebQQ协议是一套基于HTTP的QQ协议, 而用Python的urllib2库进行请求太慢, 因为HTTP本身就使用socket请求, 所以改用多路复用I/O模型, 而Tornado简单高效, 看过代码后可以轻松上手.平台兼容性很好,

  • 如何用python写一个简单的词法分析器

    编译原理老师要求写一个java的词法分析器,想了想决定用python写一个. 目标 能识别出变量,数字,运算符,界符和关键字,用excel表打印出来. 有了目标,想想要怎么实现词法分析器. 1.先进行预处理,把注释,多余的空格,空行去掉. 2.一行一行扫描,行里逐字扫描,把界符和运算符当做分割符,遇到就先停下开始判断. 若是以 英文字母.$.下划线开头,则可能是变量和关键字,在判断是关键字还是变量. 若是数字开头,则判断下一位是不是也是数字,直到遇到非数字停止,在把数字取出来. 再来判断分割符是

  • 如何用Python写一个简单的通讯录

    目录 用Python写一个简单的通讯录 一.构思 1.定义空列表和一个空字典来存储 2.定义功能选项 3.添加通讯录功能 3.2 删除学员功能 二.整体项目演示 用Python写一个简单的通讯录 一.构思 1.定义空列表和一个空字典来存储 list1=[] #用于储存字典中的信息 dict1={} #用于储存联系人信息 2.定义功能选项 def Menu(): print('请选择功能--------\n' '1.添加学员\n' '2.删除学员\n' '3.修改学员\n' '4.查询学员\n'

  • Python写一个简单上课点名系统(附源码)

    目录 一.准备工作 1.Tkinter 2.PIL 二.预览 1.启动 2.开始点名-顺序点名 3.开始点名-随机点名 4.手动加载人名单 5.开始点名-顺序点名-Pyqt5版本 三.思路 1.整体实现思路 2.点名实现思路 四.源代码 五.总结 一.准备工作 1.Tkinter Tkinter 是 python 内置的 TK GUI 工具集.TK 是 Tcl 语言的原生 GUI 库.作为 python 的图形设计工具,它所使用的 Tcl 语言环境已经完全嵌入到了 python 解释器中. 我们

  • Python写一个简单的在线编辑器

    直接奔入主题看下面pywebio程序,实现了Python的简陋在线编辑器 from pywebio.input import * from pywebio.output import put_text from os import system,remove try:     code = textarea('Code Edit Online', code={'mode': "python",'theme': 'darcula'}, value='# input your code h

  • Python 如何创建一个简单的REST接口

    问题 你想使用一个简单的REST接口通过网络远程控制或访问你的应用程序,但是你又不想自己去安装一个完整的web框架. 解决方案 构建一个REST风格的接口最简单的方法是创建一个基于WSGI标准(PEP 3333)的很小的库,下面是一个例子: # resty.py import cgi def notfound_404(environ, start_response): start_response('404 Not Found', [ ('Content-type', 'text/plain')

随机推荐