我需要重写现有的 WebService 作为 Django 应用程序的一部分,目标是将 Django 应用程序集成到只能调用此特定 WebService 的遗留系统。
所以我确实有一个非常复杂的 WSDL 文件,其中包含多种方法和庞大的数据结构。有没有办法使用该 WSDL 文件为 Django 中的应用程序生成存根,或者我必须自己创建所有必要的数据结构和方法签名?
查看Zeep
Zeep 检查 WSDL 文档并生成相应的代码以使用文档中的服务和类型。
views.py(服务器)
from django.http import HttpResponse
from django.views import View
from zeep import Client
class MyConvertKilometer2MilesView(View):
def get(self, request):
# <view logic>
client = Client('http://www.webservicex.net/ConvertSpeed.asmx?WSDL')
result = client.service.ConvertSpeed(
100, 'kilometersPerhour', 'milesPerhour')
return HttpResponse('result')
如果您不确定获得回报的速度(由于 SOAP 的性质),请使用
使用 Zeep 进行命令行测试
如果您想测试中间的东西,您可以使用 Zeep 的命令行界面来简化此操作。
python -m zeep http://www.soapclient.com/xml/soapresponder.wsdl
“zeep”库中的“Client”类用于创建一个客户端对象,该对象将连接到指定的 WSDL 端点“http://www.webservicex.net/ConvertSpeed.asmx?WSDL”。然后,该客户端对象用于调用 Web 服务的“ConvertSpeed”方法,传入参数“100”、“kilometersPerhour”和“milesPerhour”。
views.py(客户端)
生成客户端视图的 Django 示例如下:
# views.py (Client)
from django.http import HttpResponse
from django.views import View
from zeep import Client
class MyConvertKilometer2MilesView(View):
def get(self, request, speed):
client = Client('http://www.webservicex.net/ConvertSpeed.asmx?WSDL')
result = client.service.ConvertSpeed(speed, 'kilometersPerhour', 'milesPerhour')
return HttpResponse(result)
您还需要更新 urls.py 文件中的路由配置,以将此参数包含在 url 路径中。
# urls.py
from django.urls import path
from .views import MyConvertKilometer2MilesView
urlpatterns = [
path('convert/<int:speed>/', MyConvertKilometer2MilesView.as_view()),
]