Skip to main content
 首页 » 编程设计

python之PyAMF/Django之Flex 类映射错误

2024年08月12日53虾米姐

我正在使用 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关于我发现的序列化。