利用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描述器descriptor详解
Feb 03 Python
python实现数组插入新元素的方法
May 22 Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
使用Python将Mysql的查询数据导出到文件的方法
Feb 25 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
基于python traceback实现异常的获取与处理
Dec 13 Python
Python绘制动态水球图过程详解
Jun 03 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
Jan 23 Python
python中spy++的使用超详细教程
Jan 29 Python
教你怎么用Python监控愉客行车程
Apr 29 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
php删除数组元素示例分享
2014/02/17 PHP
php扩展开发入门demo示例
2019/09/23 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
JS跨域代码片段
2012/08/30 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
python实现360皮肤按钮控件示例
2014/02/21 Python
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
python开发之thread线程基础实例入门
2015/11/11 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
Python学习之Django的管理界面代码示例
2018/02/10 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
python 动态生成变量名以及动态获取变量的变量名方法
2019/01/20 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
python操作gitlab API过程解析
2019/12/27 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
春晚观后感
2015/06/11 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
python实现简单倒计时功能
2021/04/21 Python