我正在使用 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 对象的子类。这意味着我们的 Investor 还需要一个 user_ptr 字段。 注意:我在服务方法之前收到所有错误。
有没有更简单的方法?理想情况下,我们将拥有一个仅包含我们使用的字段的 Flex Investor VO(无论它们来自 Django User 还是我们从 User 扩展的 django Investor)。但是现在 Flex 对象必须完全按照我们的 Django 对象建模。我什至不知道 Django User 对象到底是什么样子(我不应该知道)。
我真的需要一些帮助。非常感谢:-)
请您参考如下方法:
这是使用 IExternalizable 接口(interface)完成的。
它允许您明确地写入和读取对象。如果这类似于 Java 隐式序列化,它不会让您限制默认发送的内容。我找不到 PyAMF 的任何示例。
Best post关于我发现的序列化。
