外部直接路由器的python实现
extdirect的Python项目详细描述
====
简介
===
ext direct提供了一个服务器端ext.direct路由器的python实现,它可以接受和解析ext.direct
请求数据,将其路由到正确的方法,并创建、编码和返回包装结果的正确数据结构。ext direct还提供了一个
类,该类可以从路由器类生成定义ext.direct
提供程序的客户端javascript。
有关ext.direct功能的完整描述,请参见:
http://www.extjs.com/products/extjs/direct.php
让我们看看服务器端是如何工作的。首先,我们将定义一个路由器:
>;>from extdirect.router import directrouter
>;>class testutils(directrouter):
…
…定义大写(self,word):
…返回word.upper()
…
…今天的定义(自我):
…return"今天是星期三。"
假设我们在url'/utils'上有这个类,并且我们希望包含这些方法的客户端命名空间被称为"remote"。
>;>;来自extdirect.router import directproviderdefinition
>;>;打印directproviderdefinition(testutils,"/utils","remote").render()
…#doctest:+规范化空白
<;script type="text/javascript">;
ext.direct.addprovider({"url":"/utils",
"namespace":"remote",
"type":"remoting",
"id":"testutils",
"actions":{"testutils":[{"name":"capital","len":1},
"name":"today,","len":1}]});
<;/script>;
现在,假设我们以某种方式向客户端提供了此代码,并且我们的类在该url上可用,我们现在可以从浏览器访问这些方法:
remote.testutils.capital({word:'foo',console.log)
到testutils
类的"capital"方法,并将结果馈送给回调函数,在本例中,回调函数仅将
结果打印到js控制台。
让我们从服务器的角度看一下这是如何工作的。调用
将使用json编码的主体发出post请求,因此让我们手动创建
:从extdirect.router导入json
>;data={"action":"testutils","method":"capital","data":[{"word":"foo"}],"type":"rpc","tid":1}
>;body=json.dumps(data)
s作为"action"传入,方法名为"method",并且
作为包含
参数散列的单个成员数组发送的任何数据。就我们的目的而言,"type"将始终是"rpc"。ext.direct request s
还提供了一个事务id("tid"),您可以使用它来处理过时数据的可能性。
ct显示ext.direct在
客户机上预期的结构:
>; '{"tid":1,"action":"testutils","type":"rpc","method":"capital","result":"foo"}
请注意"result",这是我们所期望的。客户会解码这个
对象并将"result"值传递给回调。为了好玩,让我们检查一下我们定义的其他方法:data={"action":"testutils","method":"today","data":[],"type":"rpc","tid":1}
>;>body=json.dumps(data)
>;>resultob=json.loads(utils(body))
>;>print resultob['result']
今天是星期三。
==
zope路由器
==
在zope中使用extdirect非常简单,因为有一个自定义的zcml
指令为服务器端api注册了一个browsview和一个
viewlet来提供提供者定义to客户。
1.定义类
,例如在myapi.py中:
myapi类(directrouter):
def a_method(self):
return‘a value’
2。将类注册为直接路由器
<;configure xmlns="http://namespaces.zope.org/browser">;
<;include package="extdirect.zope"file="meta.zcml"/>;
<;direct router
name="myapi"
namespace="myapp.remote"
class=".myapi.myapi"
/>;
<;/配置>;
>3。在模板中提供extdirect viewletmanager。
(注意:ext是一个先决条件。)
<;tal:block tal:content="structure provider:extdirect"/>;
4。随意调用方法!
<;script>;
函数a_method_callback(result){
…使用result…
}
<;/script>;
=====
=====
,因此,您有一个django应用程序,您希望添加ext.direct。方法如下:
1.将"extdirect.django"添加到settings.py
2中已安装的应用程序。在一个名为direct.py的新文件中,定义您的路由器类并注册它:
from extdirect.django import direct router,register懔router
class myrouter(directrouter):
def uppercase(self,word):
return word.upper()
def小写(self,word):
return word.lower()
register_router(myrouter,"remote")
register_router的参数是router类、客户端名称空间和/extdir下的可选url路由器
应该可用的ect(默认为类的名称)。
3。在根urlconf中,通过添加:
(r'^extdirect/',include('extdirect.django.urls')
4映射extdirect url。同样在根urlconf中,添加以下两行:
import extdirect.django as extdirect
extdirect.autodiscover()
5。在模板中,加载提供程序定义:
{%load direct_providers%}
{%direct_providers%}
>6。就是这样。您现在应该可以在该模板上访问remote
方法:
remote.myrouter.uppercase({word:'a word'},callback);
0.4
出于许可原因删除了stripped down direct.js/>添加请求批处理支持(感谢brian edwards,bedwards@zenoss.com)
zope中添加了提供的超时选项(感谢jon pierre gentil,
jgentil@zenoss.com)
0.3
eaner"extdirect.autodiscover()"
0.2
添加了django子包
0.1
初始发布,包括zope子包
简介
===
ext direct提供了一个服务器端ext.direct路由器的python实现,它可以接受和解析ext.direct
请求数据,将其路由到正确的方法,并创建、编码和返回包装结果的正确数据结构。ext direct还提供了一个
类,该类可以从路由器类生成定义ext.direct
提供程序的客户端javascript。
有关ext.direct功能的完整描述,请参见:
http://www.extjs.com/products/extjs/direct.php
让我们看看服务器端是如何工作的。首先,我们将定义一个路由器:
>;>from extdirect.router import directrouter
>;>class testutils(directrouter):
…
…定义大写(self,word):
…返回word.upper()
…
…今天的定义(自我):
…return"今天是星期三。"
假设我们在url'/utils'上有这个类,并且我们希望包含这些方法的客户端命名空间被称为"remote"。
>;>;来自extdirect.router import directproviderdefinition
>;>;打印directproviderdefinition(testutils,"/utils","remote").render()
…#doctest:+规范化空白
<;script type="text/javascript">;
ext.direct.addprovider({"url":"/utils",
"namespace":"remote",
"type":"remoting",
"id":"testutils",
"actions":{"testutils":[{"name":"capital","len":1},
"name":"today,","len":1}]});
<;/script>;
现在,假设我们以某种方式向客户端提供了此代码,并且我们的类在该url上可用,我们现在可以从浏览器访问这些方法:
remote.testutils.capital({word:'foo',console.log)
到testutils
类的"capital"方法,并将结果馈送给回调函数,在本例中,回调函数仅将
结果打印到js控制台。
让我们从服务器的角度看一下这是如何工作的。调用
将使用json编码的主体发出post请求,因此让我们手动创建
:从extdirect.router导入json
>;data={"action":"testutils","method":"capital","data":[{"word":"foo"}],"type":"rpc","tid":1}
>;body=json.dumps(data)
s作为"action"传入,方法名为"method",并且
作为包含
参数散列的单个成员数组发送的任何数据。就我们的目的而言,"type"将始终是"rpc"。ext.direct request s
还提供了一个事务id("tid"),您可以使用它来处理过时数据的可能性。
ct显示ext.direct在
客户机上预期的结构:
>;
请注意"result",这是我们所期望的。客户会解码这个
对象并将"result"值传递给回调。为了好玩,让我们检查一下我们定义的其他方法:data={"action":"testutils","method":"today","data":[],"type":"rpc","tid":1}
>;>body=json.dumps(data)
>;>resultob=json.loads(utils(body))
>;>print resultob['result']
今天是星期三。
==
zope路由器
==
在zope中使用extdirect非常简单,因为有一个自定义的zcml
指令为服务器端api注册了一个browsview和一个
viewlet来提供提供者定义to客户。
1.定义类
,例如在myapi.py中:
myapi类(directrouter):
def a_method(self):
return‘a value’
2。将类注册为直接路由器
<;configure xmlns="http://namespaces.zope.org/browser">;
<;include package="extdirect.zope"file="meta.zcml"/>;
<;direct router
name="myapi"
namespace="myapp.remote"
class=".myapi.myapi"
/>;
<;/配置>;
>3。在模板中提供extdirect viewletmanager。
(注意:ext是一个先决条件。)
<;tal:block tal:content="structure provider:extdirect"/>;
4。随意调用方法!
<;script>;
函数a_method_callback(result){
…使用result…
}
<;/script>;
=====
,因此,您有一个django应用程序,您希望添加ext.direct。方法如下:
1.将"extdirect.django"添加到settings.py
2中已安装的应用程序。在一个名为direct.py的新文件中,定义您的路由器类并注册它:
from extdirect.django import direct router,register懔router
class myrouter(directrouter):
def uppercase(self,word):
return word.upper()
def小写(self,word):
return word.lower()
register_router(myrouter,"remote")
register_router的参数是router类、客户端名称空间和/extdir下的可选url路由器
应该可用的ect(默认为类的名称)。
3。在根urlconf中,通过添加:
(r'^extdirect/',include('extdirect.django.urls')
4映射extdirect url。同样在根urlconf中,添加以下两行:
import extdirect.django as extdirect
extdirect.autodiscover()
5。在模板中,加载提供程序定义:
{%load direct_providers%}
{%direct_providers%}
>6。就是这样。您现在应该可以在该模板上访问remote
方法:
remote.myrouter.uppercase({word:'a word'},callback);
0.4
出于许可原因删除了stripped down direct.js/>添加请求批处理支持(感谢brian edwards,bedwards@zenoss.com)
zope中添加了提供的超时选项(感谢jon pierre gentil,
jgentil@zenoss.com)
0.3
eaner"extdirect.autodiscover()"
0.2
添加了django子包
0.1
初始发布,包括zope子包