利用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中用于计算对数的log()方法
May 15 Python
Python写入CSV文件的方法
Jul 08 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
python字典DICT类型合并详解
Aug 17 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
Python切割图片成九宫格的示例代码
Mar 10 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
May 26 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
Python3使用tesserocr识别字母数字验证码的实现
Jan 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/10 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
php经典算法集锦
2015/11/14 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
PHP中的表达式简述
2016/05/29 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
$()JS小技巧
2007/07/21 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
Linux下python3.7.0安装教程
2018/07/30 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
学生自我鉴定模板
2013/12/30 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
九寨沟导游词
2015/02/02 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python