利用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中编写并发程序
Feb 27 Python
Python使用QQ邮箱发送Email的方法实例
Feb 09 Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
Python读取数据集并消除数据中的空行方法
Jul 12 Python
解决python 文本过滤和清理问题
Aug 28 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
Python如何向SQLServer存储二进制图片
Jun 08 Python
详解Django中views数据查询使用locals()函数进行优化
Aug 24 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
Matlab如何实现矩阵复制扩充
Jun 02 Python
Python的这些库,你知道多少?
Jun 09 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脚本的10个技巧(6)
2006/10/09 PHP
PHP中文乱码解决方案
2015/03/05 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
dojo 之基础篇
2007/03/24 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python查看多台服务器进程的脚本分享
2014/06/11 Python
python使用chardet判断字符串编码的方法
2015/03/13 Python
python实现自动重启本程序的方法
2015/07/09 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
Python 线程池用法简单示例
2019/10/02 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
Python数组并集交集补集代码实例
2020/02/18 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
实习求职信
2013/12/01 职场文书
称象教学反思
2014/02/03 职场文书
自查自纠工作总结
2014/10/15 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
免职通知
2015/04/23 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
学习党史心得体会2016
2016/01/23 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
JavaScript 对象创建的3种方法
2021/11/17 Javascript