从现有 WSDL 构建 Django WebService

问题描述 投票:0回答:1

我需要重写现有的 WebService 作为 Django 应用程序的一部分,目标是将 Django 应用程序集成到只能调用此特定 WebService 的遗留系统。

所以我确实有一个非常复杂的 WSDL 文件,其中包含多种方法和庞大的数据结构。有没有办法使用该 WSDL 文件为 Django 中的应用程序生成存根,或者我必须自己创建所有必要的数据结构和方法签名?

python django web-services wsdl
1个回答
3
投票

查看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()),
]
© www.soinside.com 2019 - 2024. All rights reserved.