我正在使用肥皂水通过wsdl向第三者请求数据。我只保存现在返回的一些数据,但是我要为获得的数据付费,所以我希望保留所有数据。我已经决定,保存此数据的最佳方法是将原始xml响应捕获到数据库字段中,以备将来使用,如果我决定要开始使用数据的不同部分,并且在出现差异时也可以作为纸质记录使用。
所以我有一个两部分的问题:
有没有一种简单的方法可以从suds.client对象输出接收到的原始xml?在寻找答案的过程中,我了解到可以通过日志记录来完成此操作,但是我希望不必从日志中挖掘出该信息,即可放入数据库字段。我也研究了MessagePlugin.recieved()钩子,但在解析完该信息后并不能真正弄清楚如何访问此信息,只是我可以覆盖该函数并在解析原始xml时对其进行访问(这是我决定是否确实值得保存之前)。我还探讨了retxml选项,但我也想使用解析后的版本,并进行两个单独的调用,一个调用为retxml,另一个解析为将花费我两次。我希望在suds客户端中内置一个简单的功能(例如响应。as_xml()或同样简单的东西),但尚未找到类似的东西。我脑海中冒泡的选项可能是使用.received()插件钩子扩展客户端对象,该钩子将xml在解析之前保存为对象参数,以供稍后引用...但是这种执行似乎有点现在对我来说还很棘手,而且我很难相信suds客户不仅已经将其内置在某个地方,所以我想我先问一下。
我的问题的另一部分是:哪种类型的Django模型字段最适合作为原始xml处理多达100 kb的文本数据?我本来只是使用一个简单的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})
我想如果我想从原始回复中删除suds信封中的东西,我本可以使用python xml库来进一步使用回复,但是由于我现有的代码已经从suds客户端结果中获取了我想要的信息,用过的。
希望这对其他人有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句