gpt4 book ai didi

django - 如何在 Django 1.9 中覆盖 Spyne 的 call_wrapper 方法?

转载 作者:行者123 更新时间:2023-12-04 10:30:45 27 4
gpt4 key购买 nike

我正在使用 Django 1.9 公开带有 Spyne 版本 2.12.16 的 SOAP 1.1 API

我需要为我的平台中的每个请求 XML 和响应 XML 实现日志记录。

Django urls.py 是

url(r'^your_data/', DjangoView.as_view(
name="YourDataService",
services=[YourDataService],
tns='http://127.0.0.1:8000/',
in_protocol=Soap11(validator='lxml'),
out_protocol=Soap11()))

View .py:
from spyne.decorator import rpc
from spyne.model.primitive import String, AnyDict
from spyne.service import ServiceBase

class YourDataService(ServiceBase):
@rpc(String, String, String, _returns=AnyDict)
def call_this_method(self, a, b, c):
return {'aa': 'OK','bb': 'Great','cc': 'Perfect'}

我在某处读到,覆盖 Spyne ServiceBase 类的 call_wrapper 方法可以记录该服务的请求和响应 XML 数据。
但是实现同样的方法会导致奇怪的日志记录等问题:
class ServiceBaseAbstract(ServiceBase):
def call_wrapper(cls, ctx):
try:
return ctx.service_class.call_wrapper(ctx)
except Exception as err:
print err

它给出了一个错误:
No handlers could be found for logger "spyne.application.server"

API 工作正常,无需覆盖 call_wrapper。

我真的很困惑,找不到解决办法。您的帮助将不胜感激。谢谢

最佳答案

覆盖 call_wrapper是改变 Spyne 处理/记录异常的方式。

相反,您应该配置 python 日志库以显示调试级别的消息,并为 Spyne 启用协议(protocol)调试日志记录。

logging.getLogger('').setLevel(logging.DEBUG)        
logging.getLogger('spyne.protocol.xml').setLevel(logging.DEBUG)

关于django - 如何在 Django 1.9 中覆盖 Spyne 的 call_wrapper 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60427703/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com