利用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 tensorflow基于cnn实现手写数字识别
Jan 01 Python
Python设计模式之命令模式简单示例
Jan 10 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
Apr 11 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
May 16 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
May 30 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
python 爬取古诗文存入mysql数据库的方法
Jan 08 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
Python多进程编程multiprocessing代码实例
Mar 12 Python
Pandas的Apply函数具体使用
Jul 21 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
Jan 07 Python
Python实现Telnet自动连接检测密码的示例
Apr 16 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版本号
2006/10/09 PHP
php 获得汉字拼音首字母的函数
2009/08/01 PHP
PHP 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
实现动画效果核心方式的js代码
2013/09/27 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
2014/10/17 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
解决option标签selected="selected"属性失效的问题
2017/11/06 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
Python解析xml中dom元素的方法
2015/03/12 Python
一步步解析Python斗牛游戏的概率
2016/02/12 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
python操作redis方法总结
2018/06/06 Python
Python3数据库操作包pymysql的操作方法
2018/07/16 Python
Python中请不要再用re.compile了
2019/06/30 Python
python NumPy ndarray二维数组 按照行列求平均实例
2019/11/26 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
大学生护理专业自荐信
2013/10/03 职场文书
给医务人员表扬信
2014/01/12 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
租房协议书
2014/04/10 职场文书
励志演讲稿200字
2014/08/21 职场文书
教师工作表现评语
2014/12/31 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书