【问题标题】:PyAMF / Django - Flex class mapping errorsPyAMF / Django - Flex 类映射错误
【发布时间】:2009-05-13 08:51:47
【问题描述】:

我正在使用 PyAmf 与 Flex 应用程序进行通信。但我不断收到错误。

我的模特:

from django.contrib.auth.models import User

class Talent(User):
    street = models.CharField(max_length=100)
    street_nr = models.CharField(max_length=100)
    postal_code = models.PositiveIntegerField()
    city = models.CharField(max_length=100)
    description = models.CharField(max_length=100)

我的网关文件:

from pyamf.remoting.gateway.django import DjangoGateway
from addestino.bot.services import user
from addestino.bot.models import *
from django.contrib.auth.models import User
import pyamf

pyamf.register_class(User, 'django.contrib.auth.models.User')
pyamf.register_class(Talent, 'addestino.bot.models.Talent')

services = {
    'user.register': user.register,
    'user.login': user.login,
    'user.logout': user.logout,
}

gateway = DjangoGateway(services, expose_request=True)

Flex Talent 对象:

package be.addestino.battleoftalents.model
{
    [Bindable]
    public class Investor
    {
    public static var ALIAS : String = 'be.addestino.battleoftalents.model.Investor';

    public var id:Object;
    public var street:String;
    public var street_nr:String;
    public var postal_code:uint;
    public var city:String;
    public var cash:Number;
    public var date_created:Date;
    public var date_modified:Date;
    public var username:String;
    public var password:String;
    public var email:String;

    public function Investor()
    {
    }      
}

}

如果 Flex 调用我的 register 服务方法(一种将 flex Investor 发送到 python 的方法),我会收到错误 'KeyError: first_name'。然后,当我们向 Flex VO 添加 first_name 字段时,我们会收到 last_name 错误。等等。 这个错误意味着我们的 flex VO 必须具有与我们的 django 模型完全相同的字段。对于简单的对象,这不是问题。但是我们使用 django User 对象的子类。这意味着我们的投资者还需要一个 user_ptr 字段。 注意:我在 servicemethod 之前得到所有错误。

有没有更简单的方法?理想情况下,我们应该有一个 Flex Investor VO,其中仅包含我们使用的字段(无论它们来自 Django 用户还是来自 User 的 django Investor)。但是现在 Flex 对象必须完全按照我们的 Django 对象建模。我什至不确切知道 Django User 对象是什么样子(我不应该)。

我真的需要一些帮助。提前非常感谢:-)

【问题讨论】:

    标签: python django apache-flex pyamf


    【解决方案1】:

    这是使用 IExternalizable 接口完成的。

    它允许您显式地写入和读取对象。如果这类似于 Java 隐式序列化,它不会让您限制默认发送的内容。我无法使用 PyAMF 找到任何此类示例。

    Best post 关于我发现的序列化。

    【讨论】:

      【解决方案2】:

      随着 PyAMF 0.6b2 的发布,我终于可以回答这个问题了。

      在编码 Django 模型时,0.5.1 在处理继承方面非常严格。它确保所有属性都保证在每个对象上进行编码 - 并期望在解码请求时所有属性都可用。

      这很糟糕,随着新版本的发布,行为现在发生了变化。 PyAMF很多对你从 Flex 提供的东西更加宽容。您不应该再收到 KeyError 错误(如果您这样做了,它会被认为是一个错误)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 2016-01-03
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        相关资源
        最近更新 更多