簡體   English   中英

PyAMF / Django-Flex類映射錯誤

[英]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對象是什么樣子(我不應該)。

我真的可以使用一些幫助。 在此先感謝:-)

這是使用IExternalizable接口完成的。

它使您可以顯式地寫入和讀取對象。 如果這類似於Java隱式序列化,則不會限制您默認發送的內容。 我無法通過PyAMF找到任何示例。

我發現了有關序列化的最佳文章

隨着PyAMF 0.6b2的發布,我終於可以回答這個問題。

在編碼Django模型時,0.5.1在處理繼承方面非常嚴格。 它確保所有屬性都保證在每個對象上進行編碼-並期望在解碼請求時所有屬性均可用。

隨着新版本的發布,這種情況變得很糟,並且其行為現在已經改變。 PyAMF對您從Flex手中得到的東西寬容得多。 您不應該再收到KeyError錯誤(如果確實如此,則將其視為錯誤)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM