利用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操作mysql数据库
Mar 05 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
python卸载后再次安装遇到的问题解决
Jul 10 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Feb 05 Python
Python爬取365好书中小说代码实例
Feb 28 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 Python
python xlwt模块的使用解析
Apr 13 Python
Pillow图像处理库安装及使用
Apr 12 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
MySQL修改密码方法总结
2008/03/25 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
PHP模板解析类实例
2015/07/09 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
JS查看对象功能代码
2008/04/25 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
Javascript的比较汇总
2016/07/25 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
解决linux下node.js全局模块找不到的问题
2018/05/15 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
python文件操作整理汇总
2014/10/21 Python
python文件拆分与重组实例
2018/12/10 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
Python退出时强制运行一段代码的实现方法
2020/04/29 Python
Python ellipsis 的用法详解
2020/11/20 Python
Python中过滤字符串列表的方法
2020/12/22 Python
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
养殖人员的创业计划书范文
2013/12/26 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
品德评语大全
2014/05/05 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
房贷收入证明范本
2015/06/12 职场文书
周一给客户的问候语
2015/11/10 职场文书
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android