python 開發webService

最近在學習用python 開發webservice,費了半天時間把環境搭好,記錄下具體過程,以備後用。python

首先系統上要有python。其次要用python進行webservice開發,還須要一些庫:git

一、lxml :
  命令行下 easy_install lxml 就能安裝,若是不能正常安裝下載lxml安裝 :https://pypi.python.org/pypi/lxml/3.2.2,下載後,打開解壓的文件夾,在當前文件夾中打開命令行工具,同時按中ctrl+shift鍵,點擊「在此處打開命令行窗口」 ,在命令行窗口輸入python setup.py install 回車便可。github

以下圖:web

  安裝完成,以下圖瀏覽器

  

 

 

二、pytz :
   命令行下  easy_install pytz 就能安裝,若是不能正常安裝下載pytz安裝 :https://pypi.python.org/pypi/pytz/app

三、zope:
ide

  命令行下  easy_install zope 就能安裝,若是不能正常安裝下載zope安裝 :https://pypi.python.org/pypi/zope.interface#download工具

四、pyOpenSSL學習

 命令行下  easy_install pyOpenSSL 就能安裝,若是不能正常安裝下載pyOpenSSL安裝 :https://pypi.python.org/pypi/pyOpenSSLthis

五、twisted:

  命令行下  easy_install twisted 就能安裝,若是不能正常安裝下載twisted安裝     https://pypi.python.org/pypi/Twisted/ or https://pypi.python.org/simple/twisted/

六、soaplib:

  命令行下  easy_install soaplib 就能安裝,若是不能正常安裝下載soaplib安裝 :    https://github.com/soaplib/soaplib

七、suds:

  命令行下  easy_install suds 就能安裝,若是不能正常安裝下載suds安裝 :    https://pypi.python.org/pypi/suds-jurko/0.6

因爲上面的安裝包存在依賴關係最好安裝順序下載和安裝。安裝完成後就能夠進行webservice的開發和調用了。

直接貼代碼:server.py

  

# coding: utf-8
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 HelloWorldService(DefinitionBase): #this is a web service
@soap(String,_returns=String) #聲明一個服務,標識方法的參數以及返回值
def say_hello(self,name):
return 'hello %s!'%name
@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__':
soap_app=soaplib.core.Application([HelloWorldService], 'tns')
wsgi_app=wsgi.Application(soap_app)
print 'listening on 127.0.0.1:7789'
print 'wsdl is at: http://127.0.0.1:7789/SOAP/?wsdl'
run_twisted( ( (wsgi_app, "SOAP"),), 7789)
if __name__=='__main__': #發佈服務
try:
from wsgiref.simple_server import make_server
soap_application = soaplib.core.Application([HelloWorldService], 'tns')
wsgi_application = wsgi.Application(soap_application)
server = make_server('localhost', 7789, wsgi_application)
server.serve_forever()
except ImportError:
print 'error'

python server.py能夠直接運行服務了。運行服務後打開瀏覽器,地址欄上鍵入: http://localhost:7789/SOAP/?wsdl就能看到描述服務的xml文檔了。

服務發佈好後,就能夠調用了,
調用過程要用到suds庫,上面已經提到。
客戶端調用代碼:
# coding: utf-8from suds.client import Clienttest=Client('http://localhost:7789/SOAP/?wsdl')print test.service.say_hello(' world')這樣就調用服務中say_hello這個服務方法了。
相關文章
相關標籤/搜索