Python 客户可以';由于存在空格,无法验证来自spyne SOAP服务器的答案
我有Django模型Python 客户可以';由于存在空格,无法验证来自spyne SOAP服务器的答案,python,django,soap,whitespace,spyne,Python,Django,Soap,Whitespace,Spyne,我有Django模型 class OrderItem(models.Model): comment = models.CharField('comment', max_length=255, blank=True) ..... 以及其他不重要的领域 我有这样描述的spyne模型 class OrderItemModel(DjangoComplexModel): __type_name__ = 'OrderItem' class Attributes(Djan
class OrderItem(models.Model):
comment = models.CharField('comment', max_length=255, blank=True)
.....
以及其他不重要的领域
我有这样描述的spyne模型
class OrderItemModel(DjangoComplexModel):
__type_name__ = 'OrderItem'
class Attributes(DjangoComplexModel.Attributes):
django_model = OrderItem
和生成响应的函数
@rpc(Int, _returns=Iterable(OrderItemModel))
def GetOrderItems(self, id):
order = get_object(Order, pk=id)
items = order.objects.all()
return items
xml描述是
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<SaveOrderItem xmlns="app.sync">
<model>
<comment xmlns="app.sync.models">[normalizedString]</comment>
</model>
</SaveOrderItem>
</Body>
</Envelope>
以便white\u space=“replace”在客户端执行该检查。我找到了解决此问题的方法: 我只是将默认字段映射器中的“CharField”替换为Unicode 默认\u model\u mapper.register('CharField',primitive.Unicode) 而不是默认 ('CharField',primitive.NormalizedString)
这在spyne/util/django.py中有描述,我不明白。我对空白的理解是,它不是一种限制,而是一种操作。这不应该是你问题的根源。请参阅:您找到的类型是为了Xml模式兼容性。在返回对象之前,可以使用常用方法将所有空格替换为空格。最后一件事,whitespace=“replace”和whitespace=“collapse”是两件不同的事情。我觉得你把他们弄糊涂了。请仔细阅读我提供的链接中的规范。是的,当然我可以手动剥离所有文件,并返回从ComplexModel继承的对象,但是我有很多模型,这个解决方案将使支持它们变得不那么困难。关于空白,我没有配置它,这是默认行为。Django模型的所有字符串字段(models.CharField)在SOAP返回的对象中被描述为normalizedString。我认为响应函数应该在响应中剥离字符串,因为它设置了字段normalizedString的类型。
class NormalizedString(Unicode):
__type_name__ = 'normalizedString'
__extends__ = Unicode
class Attributes(Unicode.Attributes):
white_space = "replace"