利用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删除指定目录下过期文件的2个脚本分享
Apr 10 Python
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
Python中的TCP socket写法示例
May 11 Python
通过Pandas读取大文件的实例
Jun 07 Python
python实现三维拟合的方法
Dec 29 Python
NumPy中的维度Axis详解
Nov 26 Python
pytorch数据预处理错误的解决
Feb 20 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 Python
如何在Python中创建二叉树
Mar 30 Python
python基础之模块的导入
Oct 24 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初学者最感迷茫的问题小结
2010/03/27 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
调整PHP的性能
2013/10/30 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
BootStrap selectpicker
2016/06/20 Javascript
jquery延迟对象解析
2016/10/26 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
数组越界问题
2015/10/21 面试题
计算机大学生的自我评价
2013/10/15 职场文书
2015年宣传工作总结
2015/04/08 职场文书
安全守法证明
2015/06/23 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书