2

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

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

我真的可以使用一些帮助。提前非常感谢:-)

4

2 回答 2

3

这是使用 IExternalizable 接口完成的。

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

我发现的关于序列化的最佳帖子。

于 2009-05-14T00:33:11.317 回答
1

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

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

这很糟糕,随着新版本的发布,行为现在已经改变。PyAMF对您从 Flex 提供的内容更加宽容您不应再收到该KeyError错误(如果您这样做,则将其视为错误)。

于 2010-08-12T23:55:34.360 回答