Uliweb 中 XMLRPC 的使用
配置
向$project/apps/settings.ini中的INSTALLED_APPS中添加'uliweb.contrib.xmlrpc'。
配置完毕后,你的应用就已经有一个/XMLRPC的url可以使用了。比如可以通过::
来访问XMLRPC服务。如果你想要修改这个URL,可以在settings.ini中添加::
[EXPOSES]
/XMLRPC = 'uliweb.contrib.xmlrpc.views.xmlrpc'
在uliweb.contrib.xmlrpc的settings.ini中已经定义上述内容。
使用
下面我使用一个示例的方式来展示如何使用xmlrpc。
先让我们创建一个xmlrpc_test的项目和一个Hello的app,操作如下::
uliweb makeproject xmlrpc_test
cd xmlrpc_test
uliweb makeapp Hello
修改settings.ini添加uliweb.contrib.xmlrpc::
[GLOBAL]
DEBUG = True
INSTALLED_APPS = [
# 'uliweb.contrib.staticfiles',
'uliweb.contrib.xmlrpc',
'Hello',
]
然后修改Hello/views.py,修改的内容如下::
#coding=utf-8
from uliweb import function
xmlrpc = function('xmlrpc')@xmlrpc
def hello():
return 'hello'
@xmlrpc('func')
def new_func():
return 'new_func'@xmlrpc
class Hello(object):
def test(self, name):
return {'user':name}
@xmlrpc('name')
def new_name(self):
return 'new_name'
说明如下:
#. xmlrpc提供了一个同名的decorator函数,可以用来修饰普通的函数和类,以便将其转
为XMLRPC的服务。而这个decorator是定义在xmlrpc的settings.ini中的,例如::
[FUNCTIONS]
xmlrpc = 'uliweb.contrib.xmlrpc.xmlrpc'
为了获取真正的函数对象,uliweb提供了一个内部函数叫function。使用它就可以从settings.ini的FUNCTIONS中获取一个形如'module.function'的函数对象。
#. xmlrpc可以支持函数和类。函数和类本身没有特别要求。对于类,一般不定义__init__ 方法,如果有,也需要可以支持不带参数的调用。因为在调用类方法时,xmlrpc会自动创建类。
#. xmlrpc可以支持带参数或不带参数。不带参数则会直接使用函数名作为将来调用的函数名。如果是类,则形式为ClassName.MethodName的形式。如果带参数,则这个参数将作为被调用的函数名,而不是原来的函数名了。所以上面的@xmlrpc('func')就是给所修饰的函数重新起了一个名字,客户端应该使用func来访问,而不是new_func。
#. 如果类函数是以'_'开头的,将不会被调用。
#. 在类方法上仍然可以使用xmlrpc,这样相当于创建了一个xmlrpc函数的别名。
#. Uliweb提供的xmlrpc调用还支持与views相类似的__begin__和__end__的处理。同时可以在类上使用。有兴趣的可以自行测试。
测试
下面创建一个测试程序,如test_xmlrpc.py::
#coding=utf-8
from xmlrpclib import ServerProxy
server = ServerProxy(http://localhost:8000/XMLRPC)
print server.hello()
print server.func()
print server.Hello.test('limodou')
可以看到,如果是类的方式,可以使用 ``server.Hello.test('limodou')`` 很方便。
如果执行正确,运行结果为::
hello
new_func
{'user': 'limodou'}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。