加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:23:46 所属栏目:百科 来源:网络整理
导读:我正在使用suds来使用wsdl从第三方请求数据.我现在只保存一些返回的数据,但是我正在为我得到的数据付费,所以我想保留所有数据.我已经决定保存这些数据的最佳方法是将原始xml响应捕获到数据库字段中,以备将来使用,如果我决定要开始使用数据的不同部分,并在发
我正在使用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解析结果,而不必重新提交我的搜索lika所以:

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

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

希望这有助于其他人.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读