python的flex服务端数据接口开发

python 如果给flex提供服务端,需要提供一个网关和一个可供客户端(flex)调用的类。这方面我更加推荐用twisted来写这个网关,因为twisted有很好的异步机制。

下面的我写的一个简单的验证用户的python服务端:

______________________________
DBServer.py

# Copyright (c) 2009-2010 The Newjh Project.
"""
@author: Roy
@since: 0.1.0
"""

import os.path

import ConfigParser

cfg = ConfigParser.SafeConfigParser()
cfg.read('settings.cfg')

from twisted.internet import reactor
from twisted.web import server as _server, static, resource
from twisted.enterprise import adbapi

from pyamf.remoting.gateway.twisted import TwistedGateway

from newjh import newjhService

root = resource.Resource()
gw = TwistedGateway({'newjh': newjhService(adbapi.ConnectionPool('MySQLdb',
host=cfg.get('db','host'), user=cfg.get('db','user'),
passwd=cfg.get('db','password'), db=cfg.get('db','database'),
cp_reconnect=True,use_unicode=True, charset='utf8'))},     expose_request=False)

root.putChild('gateway', gw)
root.putChild('crossdomain.xml', static.File(os.path.join(os.getcwd(),
os.path.dirname(__file__), 'crossdomain.xml'), defaultType='application/xml'))

server = _server.Site(root)

reactor.listenTCP(8000, server)

reactor.run()

————————————————
newjh.py

"""
Newjh remoting service.

@since: 0.1.0
"""

from datetime import datetime
from urlparse import urlparse
import re

from twisted.internet import defer
from twisted.internet.task import LoopingCall

import pyamf 
from pyamf.flex import ArrayCollection, ObjectProxy
from pyamf.remoting.gateway import expose_request

EMAIL_RE = r"^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$"

# This is MySQL specific, make sure that if you use a different database server
# this is updated to ensure sql injection attacks don't occur 
def sql_safe(value):
if isinstance(value, basestring):
return value.replace("'", "\\'")
elif isinstance(type(value), (int, float)):
return value

raise TypeError, 'basestring, int or float expected'

def is_valid_url(url):
o = urlparse(url)

# scheme
if o[0] == '':
return (False, 'Scheme required')

if o[1] == '':
return (False, 'Hostname required')

return (True, None)

def is_valid_email(email):
"""
A very basic email address format validator
"""
if re.match(EMAIL_RE, email) != None:
return True

return False

def build_message(row):
m = User()
m.ID = row[0]
m.UserName = row[1]
m.Password = row[2]
return m

class User:
pass

pyamf.register_class(User, 'newjh.User')

class newjhService(object):
def __init__(self, pool):
self.conn_pool = pool
LoopingCall(self._keepAlive).start(3600, False)

def _keepAlive(self):
print 'Running Keep Alive...'
self.conn_pool.runOperation('SELECT 1')

def getUser(self, username, password):
"""
Gets all approved messages.
"""
print 'username : %s passwrd : %s' % (username, password)
def cb(rs):
print rs
ret = [ObjectProxy(build_message(row)) for row in rs]
print ret
return ArrayCollection(ret)

def eb(failure):
# TODO nick: logging
return ArrayCollection()

d = self.conn_pool.runQuery("SELECT * FROM user where " + \
"UserName= '" +username + "' and Password = '" + \
password +"'" ).addErrback(eb).addCallback(cb)

return d
——————————————————
crossdomain.xml

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

——————————————————

settings.cfg
[db]
host:         localhost
user:         root
password:     *********
database:    newjh

————————————————————————
————————————————————————
flex 客户端:

客户端先建立联接,然后就可以向服务端call了,回调写在onResult
要注意的是gateway / newjh.getUser 和服务端要对应好
基类 extends NetConnection

connect("http://127.0.0.1:8000/gateway");
addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

responder = new Responder(onResult);

call(“newjh.getUser”, responder, event.data["name"], event.data["pass"]);

python的flex服务端数据接口开发的更多相关文章

  1. [SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端

    原文:[SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端 之前开发基于WinForm监控的软件,服务端基于Wcf实现,里面涉及双工模式,在客户端里面,采用心跳包机制保持与服 ...

  2. 网站的优化----首页优化---app调取服务端数据

    高并发经常会发生在有大活跃用户量来访问网站的某个点,例如用户高聚集的业务场景中,如:抢购,促销等.为了让用户流畅的访问网站,来根据自己的业务设计适合系统的处理方案. //对于APP网站首页数据,通常是 ...

  3. 服务端调用接口API利器之HttpClient

    前言 之前有介绍过HttpClient作为爬虫的简单使用,那么今天在简单的介绍一下它的另一个用途:在服务端调用接口API进行交互.之所以整理这个呢,是因为前几天在测试云之家待办消息接口的时候,有使用云 ...

  4. android菜鸟学习笔记24----与服务器端交互(一)使用HttpURLConnection和HttpClient请求服务端数据

    主要是基于HTTP协议与服务端进行交互. 涉及到的类和接口有:URL.HttpURLConnection.HttpClient等 URL: 使用一个String类型的url构造一个URL对象,如: U ...

  5. 【教程】【FLEX】#002 请求服务端数据(UrlLoader)

    为什么Flex需要请求服务端读取数据,而不是自己读取? Flex 是一门界面语言,主要是做界面展示的,它能实现很多绚丽的效果,这个是传统Web项目部能比的. 但是它对数据库和文件的读写 没有良好的支持 ...

  6. Python Flask 实现移动端应用接口(API)

    引言 目前,Web 应用已形成一种趋势:业务逻辑被越来越多地移到客户端,逐渐完善为一种称为富互联网应用(RIA,rich Internet application)的架构.在 RIA 中,服务器的主要 ...

  7. SSE技术详解:使用 HTTP 做服务端数据推送应用的技术

    SSE ( Server-sent Events )是 WebSocket 的一种轻量代替方案,使用 HTTP 协议. 严格地说,HTTP 协议是没有办法做服务器推送的,但是当服务器向客户端声明接下来 ...

  8. APP数据接口开发的一些经验

    刚接到这样的任务时,没有感觉到任何压力,不就是给移动端应用提供数据吗?那边发来参数,这边处理数据,返回JSON.做网站开发时经常使用ajax请求后台数据,不就是这么回事吗.于是,在确认完需求后就开始干 ...

  9. pacejs进度条监控服务端数据加载是否完毕

    记得刚刚入职新公司的时候,公司在做app里面的h5页面.跟之前公司的流程不太一样.之前都是写完静态页面后通过ajax加载接口数据,这公司省事了,写完静态页面直接扔给服务端,他们来填数据,确实给前端省事 ...

随机推荐

  1. Dojo入门:增强的Ajax功能

      随着Web技术的发展,RIA似乎已经成了主流,Ajax也随之成了不可或缺的部分.Ajax是异步的javascript和Xml,虽然现在很多交互的数据格式都不再严格的采用XML,但这种异步的操作却越 ...

  2. ETH 全节点的远程Debug环境搭建

    ETH全节点还是很浪费资源的,尤其是在同步下来所有区块链,如果你打算在本地进行全节点的Debug吗,有点不现实.这个文档 编译,在要运行的机器上面安装devel,一般的方法是,编译好之后,放到服务器上 ...

  3. opencv的曲线拟合polyfit

    推荐一个不错的网页,可以直接用solve函数求解方程组: http://m.blog.csdn.net/u014652390/article/details/52789591 4.1 曲线拟合的最小二 ...

  4. 【VS开发】VS2013多字节工程问题uilding an MFC project for a non-Unicode character set is deprecated

    VS2013多字节工程问题 使用VS2013编译旧版VC++程序时,提示Building an MFC project for a non-Unicode character set is depre ...

  5. 第七次学习总结&&第五次实验报告

    一.实验目的 (1)理解抽象类与接口的使用: (2)了解包的作用,掌握包的设计方法. 二.实验要求 (1)掌握使用抽象类的方法. (2)掌握使用系统接口的技术和创建自定义接口的方法. (3)了解 Ja ...

  6. MyEclipse 2013 破解

    本文链接:https://blog.csdn.net/Jayliue/article/details/97414181 1.运行cracker.jar 用 cd 命令找到 cracker.jar所在目 ...

  7. VeryNginx中文文档

    VeryNginx VeryNginx 是一个功能强大而对人类友好的 Nginx 扩展程序. 提示 v0.2` 版本之后,控制台入口被移动到了 `/verynginx/index.html 中文控制台 ...

  8. C++ bool、三目运算符、引用

    bool变量: C++相对于C语言加入了bool变量,其值为true(1) 和 false(0).true表示不为零的数  false表示为零的数,占用一个字节的空间. 代码: /* 编译环境  gc ...

  9. 剑指offer-字符串的排列-数组-递归-动态规划-python

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输 ...

  10. npm学习(十二)之高级用法

    如何使用距离标记标记包 如何使用双因素身份验证 如何使用安全令牌 如何从CLI更改配置文件设置 理解包和模块