我正在使用 suds 使用 wsdl 向第三方请求数据。我现在只保存一些返回的数据,但我正在为获得的数据付费,所以我想保留所有数据。我决定保存此数据的最佳方法是将原始 xml 响应捕获到数据库字段中,以便将来在我决定开始使用数据的不同部分时使用,并在出现差异时作为书面记录。
所以我有一个由两部分组成的问题:
有没有一种简单的方法可以输出从 suds.client 对象接收到的原始 xml?在我寻找这个问题答案的过程中,我了解到这可以通过日志记录来完成,但我希望不必从日志中挖掘该信息以放入数据库字段。我还研究了 MessagePlugin.recieved() 挂钩,但无法真正弄清楚如何在解析后访问此信息,只是我可以覆盖该函数并在解析时访问原始 xml (这是在我决定它是否真的值得保存之前)。我还探索了 retxml 选项,但我也想使用已解析的版本,并进行两个单独的调用,一个作为 retxml,另一个已解析将花费我两倍的费用。我希望在 suds 客户端中内置一个简单的函数(例如 response.as_xml() 或同样简单的函数),但还没有找到类似的函数。我脑海中浮现的选项可能是使用 .received() 插件钩子来扩展客户端对象,该钩子在解析 xml 之前将其保存为对象参数,以便稍后引用......但是这样的执行似乎有点现在对我来说很棘手,我很难相信肥皂水客户端不仅仅已经在某个地方内置了这个,所以我想我应该先问一下。
我的问题的另一部分是:哪种类型的 django 模型字段最适合处理高达 ~100 kb 的文本数据作为原始 xml?我本来打算简单地使用一个简单的 CharField 和一个愚蠢的长 max_length ,但这感觉不对。
提前致谢。
我通过在客户端初始化时使用标志 retxml 解决了这个问题:
client = Client(settings.WSDL_ADDRESS, retxml=True)
raw_reply = client.service.PersonSearch(soapified_search_object)
然后我能够将 raw_reply 作为原始 xml 保存到 django models.TextField() 中
然后注入原始 xml 以获得 suds 解析结果,而无需重新提交我的搜索,如下所示:
parsed_result = client.service.PersonSearch(__inject={'reply': raw_reply})
我想如果我想从原始回复中去掉泡沫信封内容,我可以使用 python xml 库来进一步使用回复,但由于我现有的代码已经从泡沫客户端结果中获取了我想要的信息,所以我只是用过那个。
希望这对其他人有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)