我正在使用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人才对象:
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服务方法(一种向python发送flex的方法),我将得到一个错误'KeyError: first_name'。然后,当我们在Flex中添加一个first_name字段时,我们会得到一个last_name错误。诸若此类。这个错误意味着我们的flex必须有与django模型完全相同的字段。对于简单的对象,这不会是一个问题。但是我们使用django用户对象的子类。这意味着我们的投资者也需要一个user_ptr字段。注意:在服务方法之前,我会得到所有错误。
有更简单的方法吗?理想情况下,我们应该有一个Flex,它只包含我们使用的字段(不管它们来自Django用户还是从User扩展的django Investor )。但是现在,Flex对象必须完全按照我们的Django对象建模。我甚至不知道Django用户对象到底是什么样子(我不应该这么做)。
我真的需要帮助。提前多谢:)
发布于 2009-05-14 00:33:11
这是使用IExternalizable接口完成的。
它允许您显式地写入和读取对象。如果这与Java隐式序列化类似,则不会允许您限制默认发送的内容。我在PyAMF中找不到这方面的任何例子。
我发现了关于序列化的最佳职位。
发布于 2010-08-12 23:55:34
随着PyAMF 0.6b2的发布,我终于可以回答这个问题了。
0.5.1在编码Django模型时,它处理继承的方式非常严格。它确保所有属性都被保证对每个对象进行编码,并期望在解码请求时所有属性都可用。
这太糟糕了,随着新版本的发布,这种行为也发生了变化。对于您从Flex中传递出来的内容,PyAMF要宽容得多。您不应该再得到KeyError错误了(如果是的话,它就被认为是一个错误)。
https://stackoverflow.com/questions/856846
复制相似问题