利用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实现数据库编程方法详解
Jun 09 Python
浅谈python正则的常用方法 覆盖范围70%以上
Mar 14 Python
Python回文字符串及回文数字判定功能示例
Mar 20 Python
Python中XlsxWriter模块简介与用法分析
Apr 24 Python
python Web开发你要理解的WSGI & uwsgi详解
Aug 01 Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 Python
django 连接数据库 sqlite的例子
Aug 14 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
Python基于Faker假数据构造库
Nov 30 Python
selenium+headless chrome爬虫的实现示例
Jan 08 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 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函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
$("").click与onclick的区别示例介绍
2014/09/25 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
对layui中表单元素的使用详解
2018/08/15 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
python将秒数转化为时间格式的实例
2018/09/16 Python
python 构造三维全零数组的方法
2018/11/12 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
出纳的岗位职责
2013/11/09 职场文书
大学生毕业自我评价范文分享
2013/11/11 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
学生上课说话检讨书
2014/10/25 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
解决pytorch-gpu 安装失败的记录
2021/05/24 Python