Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 客户可以';由于存在空格,无法验证来自spyne SOAP服务器的答案_Python_Django_Soap_Whitespace_Spyne - Fatal编程技术网

Python 客户可以';由于存在空格,无法验证来自spyne SOAP服务器的答案

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

我有Django模型

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"