gpt4 book ai didi

python - 如何从 suds 响应中获取未解析的 XML,以及用于存储的最佳 Django 模型字段

转载 作者:数据小太阳 更新时间:2023-10-29 02:00:44 30 4
gpt4 key购买 nike

我正在使用 suds 从使用 wsdl 的第 3 方请求数据。我现在只保存部分返回的数据,但我要为获得的数据付费,所以我想保留所有数据。我已经决定保存此数据的最佳方法是将原始 xml 响应捕获到数据库字段中,以备将来使用(如果我决定要开始使用数据的不同部分)以及在出现差异时作为书面记录.

所以我有一个两部分的问题:

有没有一种简单的方法可以从 suds.client 对象输出原始接收到的 xml?在我寻找答案的过程中,我了解到这可以通过日志记录来完成,但我希望不必从日志中挖掘出该信息以放入数据库字段。我还查看了 MessagePlugin.recieved() Hook ,但无法真正弄清楚如何在解析后访问此信息,只是我可以覆盖该函数并在解析时访问原始 xml(这是在我决定它是否真的值得保存之前)。我还探索了 retxml 选项,但我也想使用已解析的版本并进行两次单独的调用,一个作为 retxml,另一个已解析将花费我两次。我希望在 suds 客户端中内置一个简单的函数(比如 response.as_xml() 或同样简单的东西),但还没有找到类似的东西。在我脑海中浮现的选项可能是使用 .received() 插件 Hook 扩展客户端对象,该 Hook 在解析之前将 xml 保存为对象参数,以便稍后引用......但是这样的执行似乎有点现在对我来说很棘手,我很难相信 suds 客户端不只是已经在某个地方内置了这个,所以我想我会先问问。

我的问题的另一部分是:哪种类型的 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()然后注入(inject)原始 xml 以获得泡沫解析结果,而无需重新提交我的搜索 lika 如此:

parsed_result = client.service.PersonSearch(__inject={'reply': raw_reply})

我想如果我想从原始回复中去除泡沫信封的东西,我可以使用 python xml 库来进一步使用回复,但是因为我现有的代码已经从泡沫客户端获取了我想要的信息结果我刚刚用了那个。

希望这对其他人有帮助。

关于python - 如何从 suds 响应中获取未解析的 XML,以及用于存储的最佳 Django 模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26266847/

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