Django使用spyne写webservice


一、下载安装spyne

pip install spyne

二、

使用Django创建一个新的项目和app

urls

url(r'^information/', views.information_app),

 

views

#-*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
# import logging
# logging.basicConfig(level=logging.DEBUG)
#from spyne import Application, rpc, ServiceBase,Integer, Unicode
from spyne import Application,rpc,ServiceBase,Iterable,Integer,Unicode
from spyne.protocol.soap import Soap11
from spyne.server.wsgi import WsgiApplication
from spyne import Iterable
from spyne.protocol.xml import XmlDocument
# from spyne.protocol.json import JsonDocument
from spyne.server.django import DjangoApplication
from django.views.decorators.csrf import csrf_exempt
import json
from referral_service_app import models
from xml.etree import ElementTree

class HelloWorldService(ServiceBase):
    @rpc(Unicode, _returns=Iterable(Unicode))
    def ess_information(ctx, data):
        dic = {"a":1,"b":2}
        return HttpResponse(json.dumps(dic))

application = Application([HelloWorldService],
    tns='spyne.examples.hello',
    in_protocol=Soap11(validator='lxml'),
    out_protocol=Soap11()
)

# This module resides in a package in your Django
# project.

information_app = csrf_exempt(DjangoApplication(application))

解释

@rpc(Unicode, Integer, _returns=Iterable(Unicode))    #如果上面在增加一个Integer,说明传入的第二个参数数组
def ess_information(ctx, data,num):    #传入的参数也需要变成两个

 

测试请求,我们使用suds来测试

安装suds模块

pip install suds

测试代码

#-*- coding: utf-8 -*-
from suds.client import Client
import traceback

ip = "127.0.0.1"
port = "8000"
client = Client("http://%s:%s/information/?wsdl"%(ip, port))    #你请求的url

data = "HelloWord"

try:
    result = client.service.ess_information(data)
    print result
except:
    traceback.print_exc()

如果像上面改成两个参数,则请求时也需要两个参数

result = client.service.ess_information(data,3)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM