Skip to main content
 首页 » 编程设计

python之从现有的 WSDL 构建 Django WebService

2024年08月22日31kerrycode

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

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

请您参考如下方法:

查看 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 -mzeep http://www.soapclient.com/xml/soapresponder.wsdl 

“zeep”库中的“Client”类用于创建将连接到指定 WSDL 端点“http://www.webservicex.net/ConvertSpeed.asmx?WSDL”的客户端对象。然后使用此客户端对象调用 Web 服务的“ConvertSpeed”方法,传入参数“100”、“kilometersPerhour”和“milesPerhour”。

views.py(客户端)

生成客户端 View 的 Django 示例是:

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 路径中。

from django.urls import path 
from .views import MyConvertKilometer2MilesView 
 
urlpatterns = [ 
    path('convert/<int:speed>/', MyConvertKilometer2MilesView.as_view()), 
]