利用soaplib搭建webservice详细步骤和实例代码


Posted in Python onNovember 20, 2013

最近在搞基于python的webservice项目,今天为把环境给配好,折腾了不少时间,还是把配的过程记录下来,以后备用:
首先你系统上要有python,这个不必说啦,我系统上用的是2.7+
其次,要用python进行webservice开发,还需要一些库:
lxml :
命令行下 sudo easy_install lxml 就能安装

pytz :
 命令行下 sudo easy_install pytz 就能安装

soaplib:
进行webservice开发必须要用的库,可以在https://github.com/volador/soaplib拿到,注意要先安装上面两个插件再安装这个,因为这个依赖于上面两个插件,把zip拿下来后解压,sudo python setup.py install 就能安装了。

Soaplib is an easy to use python library for publishing soap web services using WSDL 1.1 standard, and answering SOAP 1.1 requests. With a very small amount of code, soaplib allows you to write a useful web service and deploy it as a WSGI application.

soaplib是python的soap框架,可以用来建立webservice.soaplib这样在这里下载:https://github.com/volador/soaplib

装好soaplib后新建一个test.py,建立一个webservice,实现返回两个整数相加的和。代码如下:

# -*- coding: cp936 -*-
import soaplib
from soaplib.core.util.wsgi_wrapper import run_twisted #发布服务
from soaplib.core.server import wsgi
from soaplib.core.service import DefinitionBase  #所有服务类必须继承该类
from soaplib.core.service import soap  #声明注解
from soaplib.core.model.clazz import Array #声明要使用的类型
from soaplib.core.model.clazz import ClassModel  #若服务返回类,该返回类必须是该类的子类
from soaplib.core.model.primitive import Integer,String
class C_ProbeCdrModel(ClassModel):
        __namespace__ = "C_ProbeCdrModel"
        Name=String
        Id=Integer
class AdditionService(DefinitionBase):  #this is a web service      
        @soap(Integer,Integer,_returns=String)
        def addition(self,a,b):
                return str(a)+'+'+str(b)+'='+str(a+b)       
        @soap(_returns=Array(String))
        def GetCdrArray(self):
                L_Result=["1","2","3"]
                return L_Result
        @soap(_returns=C_ProbeCdrModel)
        def GetCdr(self): #返回的是一个类,该类必须是ClassModel的子类,该类已经在上面定义
                L_Model=C_ProbeCdrModel()
                L_Model.Name=L_Model.Name
                L_Model.Id=L_Model.Id
                return L_Model            
if __name__=='__main__':  #发布服务       
        try:
                print '服务已经开启'
                from wsgiref.simple_server import make_server
                soap_application = soaplib.core.Application([AdditionService], 'tns')
                wsgi_application = wsgi.Application(soap_application)
                server = make_server('localhost', 7789, wsgi_application)
                server.serve_forever()
        except ImportError:
                print 'error'

在浏览器中访问http://127.0.0.1:7789/SOAP/?wsdl出现一大版的xml而不是访问错误,就说明服务添加成功啦
在命令行下既可以测试

>>>from suds.client import Client
>>> test=Client('http://localhost:7789/SOAP/?wsdl')
>>> print test.service.addition(1,2)
1+2=3

问题注意:代码运行过程中,会出现各种模块没找到,那是因为你没有安装,根据提示,google搜索下载安装就好,如果是windows,找不到exe,zip格式的安装文件,下载tar.gz也行的,解压后在cmd切换到解压目录,执行:python setup.py install便安装成功了。
第一次建立连接很慢很慢,慢到无法忍受,>>> test=Client('http://localhost:7789/SOAP/?wsdl'),不知道是怎么回事。

Python 相关文章推荐
python 从远程服务器下载日志文件的程序
Feb 10 Python
python从ftp下载数据保存实例
Nov 20 Python
10款最好的Web开发的 Python 框架
Mar 18 Python
Python实现把json格式转换成文本或sql文件
Jul 10 Python
python实现上传下载文件功能
Nov 19 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
Python简单I/O操作示例
Mar 18 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
python+flask编写一个简单的登录接口
Nov 13 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 Python
python从ftp下载数据保存实例
Nov 20 #Python
python正则表达式抓取成语网站
Nov 20 #Python
python爬取网站数据保存使用的方法
Nov 20 #Python
使用python搭建Django应用程序步骤及版本冲突问题解决
Nov 19 #Python
python解析json实例方法
Nov 19 #Python
python聊天程序实例代码分享
Nov 18 #Python
python实现系统状态监测和故障转移实例方法
Nov 18 #Python
You might like
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
php zend 相对路径问题
2009/01/12 PHP
php 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
ThinkPHP模板IF标签用法详解
2014/07/01 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
python多维数组切片方法
2018/04/13 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
python 如何实现遗传算法
2020/09/22 Python
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
运动会开幕式邀请函
2014/02/03 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
外出培训学习心得体会
2016/01/18 职场文书
python实现Thrift服务端的方法
2021/04/20 Python
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
Python中如何处理常见报错
2022/01/18 Python
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android