利用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 15 Python
Python max内置函数详细介绍
Nov 17 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
详解Python安装scrapy的正确姿势
Jun 26 Python
Selenium的使用详解
Oct 19 Python
Python格式化字符串f-string概览(小结)
Jun 18 Python
将python运行结果保存至本地文件中的示例讲解
Jul 11 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
将keras的h5模型转换为tensorflow的pb模型操作
May 25 Python
python如何求圆的面积
Jul 01 Python
总结Python使用过程中的bug
Jun 18 Python
Pygame Event事件模块的详细示例
Nov 17 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中for循环语句的几种变型
2007/03/16 PHP
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php实现socket推送技术的示例
2017/12/20 PHP
php数组遍历类与用法示例
2019/05/24 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
利用Python演示数型数据结构的教程
2015/04/03 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
浅析Python函数式编程
2018/10/06 Python
Django 全局的static和templates的使用详解
2019/07/19 Python
python区分不同数据类型的方法
2019/10/14 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
幼儿园实习生辞职信
2014/01/20 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
财务部经理岗位职责
2014/02/03 职场文书
书法大赛策划方案
2014/06/04 职场文书
初中家长评语大全
2014/12/26 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js