利用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自定义简单图轴简单实例
Jan 08 Python
在Django中输出matplotlib生成的图片方法
May 24 Python
解决python 无法加载downsample模型的问题
Oct 25 Python
python简单贪吃蛇开发
Jan 28 Python
Python random库使用方法及异常处理方案
Mar 02 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
django修改models重建数据库的操作
Mar 31 Python
Python垃圾回收机制三种实现方法
Apr 27 Python
python代码区分大小写吗
Jun 17 Python
Python包资源下载路径报404解决方案
Nov 05 Python
Python制作简单的剪刀石头布游戏
Dec 10 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
Dec 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
收音机的保养
2021/03/01 无线电
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
PHP邮箱验证示例教程
2016/06/01 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
Python去掉字符串中空格的方法
2014/03/11 Python
Python sys.argv用法实例
2015/05/28 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
Python查询IP地址归属完整代码
2017/06/21 Python
python批量创建指定名称的文件夹
2019/03/21 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
django queryset相加和筛选教程
2020/05/18 Python
波兰香水和化妆品购物网站:Notino.pl
2017/11/07 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
vue实现倒计时功能
2021/03/24 Vue.js
秋季红领巾广播稿
2014/01/27 职场文书
计算机毕业生求职信
2014/06/10 职场文书
安全生产标语大全
2014/10/06 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
办公室主任岗位职责
2015/01/31 职场文书
2015年党总支工作总结
2015/05/25 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
php字符串倒叙
2021/04/01 PHP
python实现简易名片管理系统
2021/04/11 Python
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS