利用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中文编码问题小结
Sep 28 Python
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
Python 性能优化技巧总结
Nov 01 Python
JSON Web Tokens的实现原理
Apr 02 Python
Python 对象中的数据类型
May 13 Python
python技能之数据导出excel的实例代码
Aug 11 Python
通过python顺序修改文件名字的方法
Jul 11 Python
python读取csv和txt数据转换成向量的实例
Feb 12 Python
django2.0扩展用户字段示例
Feb 13 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
手把手教你配置JupyterLab 环境的实现
Feb 02 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
PHP 断点续传实例详解
2017/11/11 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
ES6的新特性概览
2016/03/10 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
vue脚手架搭建项目的兼容性配置详解
2018/07/17 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
python解析xml文件实例分析
2015/05/27 Python
python检查指定文件是否存在的方法
2015/07/06 Python
python中的编码知识整理汇总
2016/01/26 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
鱼油专家:Omegavia
2016/10/10 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
zooplus意大利:在线宠物商店
2019/08/07 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
医护人员英文求职信范文
2013/11/26 职场文书
纺织工程专业个人求职信范文
2014/01/27 职场文书
见义勇为事迹材料
2014/12/24 职场文书
租赁协议书
2015/01/27 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS