使用 PyAMF / Django 实现 Flex 类映射

1、问题背景
PyAMF 是一个用于在 Flex 和 Python 之间进行通信的库,在使用 PyAMF 与 Flex 应用进行通信时,经常会遇到错误。例如,在发送一个 Flex Investor 对象到 Python 时,会得到一个 ‘KeyError: first_name’ 的错误。这是因为 Flex 对象必须与 Django 模型具有完全相同的字段,否则就会出错。
2、解决方案
为了解决这个问题,可以使用 IExternalizable 接口。IExternalizable 接口允许您显式地写入和读取对象。通过使用 IExternalizable 接口,可以只发送和接收 Flex 对象中需要使用的字段,而无需发送所有字段。
在 PyAMF 0.6b2 版本中,对继承处理进行了修改,现在 PyAMF 对从 Flex 传入的对象更加宽容。您应该不会再收到 KeyError 错误了。
以下是使用 IExternalizable 接口来解决问题的示例代码:
from django.contrib.auth.models import User
from pyamf.flex import *class Talent(User, IExternalizable):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)def __externalize__(self):return {'id': self.id,'username': self.username,'first_name': self.first_name,'last_name': self.last_name,'email': self.email,'street': self.street,'street_nr': self.street_nr,'postal_code': self.postal_code,'city': self.city,'description': self.description,}@classmethoddef __internalize__(cls, data):talent = cls(**data)return talent
```python在 Flex 端,可以使用以下代码来注册 IExternalizable 类:```python
[Bindable]
public class Investor extends Externalizable {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() {}override public function writeExternal(output:IExternalizable):void {super.writeExternal(output);output.writeObject(id);output.writeUTF(street);output.writeUTF(street_nr);output.writeUInt(postal_code);output.writeUTF(city);output.writeNumber(cash);output.writeObject(date_created);output.writeObject(date_modified);output.writeUTF(username);output.writeUTF(password);output.writeUTF(email);}override public function readExternal(input:IExternalizable):void {super.readExternal(input);id = input.readObject();street = input.readUTF();street_nr = input.readUTF();postal_code = input.readUInt();city = input.readUTF();cash = input.readNumber();date_created = input.readObject() as Date;date_modified = input.readObject() as Date;username = input.readUTF();password = input.readUTF();email = input.readUTF();}}
使用 IExternalizable 接口可以解决 Flex 类映射的问题,从而实现 PyAMF 与 Flex 应用的无缝通信。
相关文章:
使用 PyAMF / Django 实现 Flex 类映射
1、问题背景 PyAMF 是一个用于在 Flex 和 Python 之间进行通信的库,在使用 PyAMF 与 Flex 应用进行通信时,经常会遇到错误。例如,在发送一个 Flex Investor 对象到 Python 时,会得到一个 ‘KeyError: first_name’ 的错误。这是因…...
算法思想总结:字符串
一、最长公共前缀 . - 力扣(LeetCode) 思路1:两两比较 时间复杂度mn 实现findcomon返回两两比较后的公共前缀 class Solution { public:string longestCommonPrefix(vector<string>& strs) {//两两比较 string retstrs[0];size…...
滑块拼图验证码识别
通常滑块验证码都是横向滑动,今天看到一个比较特别的滑块拼图验证码,他不仅能在横向上滑动,还需要进行纵向滑动。如下图所示: 他的滑块在背景图片的左上角,需要鼠标拖动左上角的滑块,移动到背景图的缺口位置…...
Activity启动流程
1 冷启动与热启动 应用启动分为冷启动和热启动。 冷启动:点击桌面图标,手机系统不存在该应用进程,这时系统会重新fork一个子进程来加载Application并启动Activity,这个启动方式就是冷启动。 热启动:应用的热启动比冷…...
PHP转Go系列 | ThinkPHP与Gin框架之OpenApi授权设计实践
大家好,我是码农先森。 我之前待过一个做 ToB 业务的公司,主要是研发以会员为中心的 SaaS 平台,其中涉及的子系统有会员系统、积分系统、营销系统等。在这个 SaaS 平台中有一个重要的角色「租户」,这个租户可以拥有一个或多个子系…...
使用SOAP与TrinityCore交互(待定)
原文:SOAP with TrinityCore | TrinityCore MMo Project Wiki 如何使用SOAP与TC交互 SOAP代表简单对象访问协议,是一种类似于REST的基于标准的web服务访问协议的旧形式。只要必要的配置到位,您就可以利用SOAP向TrinityCore服务器发送命令。 …...
QQ频道导航退出
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140413538 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
MySQL里的累计求和
在MySQL中,你可以使用SUM()函数来进行累计求和。如果你想要对一个列进行累计求和,可以使用OVER()子句与ORDER BY子句结合,进行窗口函数的操作。 以下是一个简单的例子,假设我们有一个名为sales的表,它有两个列&#x…...
Python爬虫速成之路(3):下载图片
hello hello~ ,这里是绝命Coding——老白~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页:绝命Coding-CSDN博客 &a…...
同三维T80004EA编解码器视频使用操作说明书:高清HDMI编解码器,高清SDI编解码器,4K超清HDMI编解码器,双路4K超高清编解码器
同三维T80004EA编解码器视频使用操作说明书:高清HDMI编解码器,高清SDI编解码器,4K超清HDMI编解码器,双路4K超高清编解码器 同三维T80004EA编解码器视频使用操作说明书:高清HDMI编解码器,高清SDI编解码器&am…...
ChatGPT提问获取高质量答案的艺术PDF下载书籍推荐分享
ChatGPT高质量prompt技巧分享pdf, ChatGPT提问获取高质量答案的艺术pdf。本书是一本全面的指南,介绍了各种 Prompt 技术的理解和利用,用于从 ChatGPTmiki sharing中生成高质量的答案。我们将探讨如何使用不同的 Prompt 工程技术来实现不同的目…...
微信小程序中的数据通信
方法1: 使用回调函数 在app.js中:可以在修改globalData后执行一个回调函数,这个回调函数可以是页面传递给app的一个更新函数。// app.js App({globalData: {someData: ,},setSomeData(newData, callback) {this.globalData.someData = newData;if (typeof callback === funct…...
everything搜索不到任何文件-设置
版本: V1.4.1.1024 (x64) 问题:搜索不到任何文件 click:[工具]->[选项]->下图所示 将本地磁盘都选中包含...
python如何结束程序运行
方法1:采用sys.exit(0),正常终止程序,从图中可以看到,程序终止后shell运行不受影响。 方法2:采用os._exit(0)关闭整个shell,从图中看到,调用sys._exit(0)后整个shell都重启了(RESTAR…...
InnoDB
InnoDB 是 MySQL 默认的存储引擎,它提供了事务支持、行级锁定和外键约束等高级功能。下面详细解析 InnoDB 的一些底层原理和关键特性。 1. 数据存储结构 表空间(Tablespace) InnoDB 使用表空间来管理数据存储,表空间可以是共享…...
spark运行报错:Container killed by YARN for exceeding memory limits
用spark跑数据量大的离线调度任务报错:Reason: Container killed by YARN for exceeding memory limits. 19.0 GB of 19 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead or disabling yarn.nodemanager.vmem-check-enabled becaus…...
(三)大模型/人工智能/机器学习/深度学习/NLP
一.模型 模型,简单来说,就是用来表示或解释某个事物、现象或系统的一种工具或框架。它可以是实体的,也可以是虚拟的,目的是为了帮助我们更好地理解和预测所描述的对象。在生活中,模型无处不在,它们以各种形…...
数学基础 -- 三角学
三角学 三角学(Trigonometry)是数学的一个分支,主要研究三角形的边长与角度之间的关系。三角学在几何学、物理学、工程学等多个领域中有广泛的应用。以下是三角学的一些基本概念和公式: 基本概念 直角三角形:一个角…...
基于BitMap的工作日间隔计算
背景问题 在我们实际开发过程中,时常会遇到日期的间隔计算,即计算多少工作日之后的日期,在不考虑法定节假日的情况下也不是那么复杂,毕竟周六、周日是相对固定的,Java语言也提供了丰富的类来处理此问题。 然而&#x…...
sqlite3 — DB-API 2.0 interface for SQLite databases
sqlite3 — DB-API 2.0 interface for SQLite databases — Python 3.12.4 documentation sqlite3 — DB-API 2.0 interface for SQLite databasessqlite3 — SQLite数据库的DB-API 2.0接口 Source code: Lib/sqlite3/ 源代码位置:Lib/sqlite3/ SQLite is a C…...
嵌入式C轻量序列化库:结构体打包与位操作零依赖实现
1. 项目概述dot_util是一个轻量级、零依赖的嵌入式 C 语言工具库,专为资源受限的 MCU(如 Cortex-M0/M3/M4、RISC-V 32 位内核)设计。其核心定位并非通用算法库或 HAL 封装,而是聚焦于底层数据序列化与结构体操作的工程痛点&#x…...
仅限核心架构师查阅:Python无锁GIL环境下的并发成本熔断机制(含实时监控脚本+自动降级策略)
第一章:Python无锁GIL环境下的并发模型成本控制策略全景概览在标准 CPython 解释器中,全局解释器锁(GIL)本质限制了多线程对 CPU 密集型任务的并行执行能力。然而,“无锁 GIL 环境”并非指移除 GIL 本身,而…...
bilibili-parse:让B站视频解析变得简单高效的PHP工具
bilibili-parse:让B站视频解析变得简单高效的PHP工具 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse 价值定位:为什么选择bilibili-parse 当你需要在自己的项目中集成B站视频…...
为什么说Rust是对自闭症谱系人士友好的编程语言?
程序员圈子里,Rust常常以学习路线陡峭而闻名。就我自己的个人理解来说,之所以说它“学习路线陡峭”,很大程度上都来源于以下三点:Rust有很多语法糖,而且官方把这些语法糖给设置成了默认的最佳实现的语法,还…...
AASM时间戳功能终极指南:自动记录状态变更时间的简单方法
AASM时间戳功能终极指南:自动记录状态变更时间的简单方法 【免费下载链接】aasm AASM - State machines for Ruby classes (plain Ruby, ActiveRecord, Mongoid, NoBrainer, Dynamoid) 项目地址: https://gitcode.com/gh_mirrors/aa/aasm AASM(Ru…...
基于混沌麻雀搜索算法的无人机航迹规划方法:CSSA策略实现与性能分析
麻雀搜索算法(SSA)文章复现:《基于混沌麻雀搜索算法的无人机航迹规划方法_汤安迪》策略为:立方混沌反向学习初始化种群反向精英策略改进发现者策略正余弦算法改进加入者策略动态调整警觉者数量高斯策略扰动——CSSA。复现内容包括:改进算法实现、23个基准…...
实战指南:基于快马平台与contextmenumanager,为你的数据可视化图表添加专业右键菜单功能
实战指南:基于快马平台与contextmenumanager,为你的数据可视化图表添加专业右键菜单功能 最近在做数据可视化项目时,发现很多用户反馈希望在图表上直接操作,而不是到处找功能按钮。于是研究了一下如何给Chart.js图表添加右键菜单…...
用Go搞定微信扫码登录:一个后端接口+一个回调,附完整可运行代码
极简Go实现微信扫码登录:两个接口搞定全流程 每次看到新项目要接入微信登录就头疼?文档翻来覆去看不明白?其实用Go实现微信扫码登录,核心代码不超过200行。今天我们就用最粗暴的方式,把微信OAuth2.0登录简化为两个接口…...
实时翻译工具Translumo:打破语言障碍的跨语言解决方案
实时翻译工具Translumo:打破语言障碍的跨语言解决方案 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 在全球化…...
从像素大陆到现实世界:Pixel Epic生成的研报被期刊录用的真实案例
从像素大陆到现实世界:Pixel Epic生成的研报被期刊录用的真实案例 1. 当游戏化AI遇见学术研究 在科研领域,撰写高质量研究报告一直是项耗时费力的工作。传统AI辅助工具虽然能提高效率,但往往缺乏创意和趣味性。Pixel Epic的出现改变了这一现…...
