[英]PyAMF / Django - Flex class mapping errors
我正在使用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
字段。 注意:在維修方法之前,我會收到所有錯誤。
有更容易的方法嗎? 理想情況下,我們將只有一個使用我們使用的字段的Flex Investor VO(無論它們來自Django User還是我們的django Investor
都來自User
)。 但是現在,Flex對象必須完全按照我們的Django對象建模。 我什至不知道Django User對象是什么樣子(我不應該)。
我真的可以使用一些幫助。 在此先感謝:-)
隨着PyAMF 0.6b2的發布,我終於可以回答這個問題。
在編碼Django模型時,0.5.1在處理繼承方面非常嚴格。 它確保所有屬性都保證在每個對象上進行編碼-並期望在解碼請求時所有屬性均可用。
隨着新版本的發布,這種情況變得很糟,並且其行為現在已經改變。 PyAMF對您從Flex手中得到的東西寬容得多。 您不應該再收到KeyError
錯誤(如果確實如此,則將其視為錯誤)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.