Web2py - 服务

web2py支持各种协议,如XML,JSON,RSS,CSV,XMLRPC,JSONRPC,AMFRPC和SOAP.这些协议中的每一个都以多种方式得到支持,我们区分 :

  • 渲染给定函数的输出格式.

  • 远程过程调用.

渲染字典

请考虑以下代码来维护会话数.

def count():
   session.counter = (session.counter or 0) + 1
   return dict(counter = session.counter, now = request.now)

上述函数增加了计数的数量.用户访问该页面.假设给定的函数是在web2py应用程序的"default.py"控制器中定义的.可以使用以下URL : 请求页面; http://127.0.0.1:8000/app/default/count

web2py可以使用不同的协议呈现上述页面,并通过向URL添加扩展名,喜欢 :

http://127.0.0.1:8000/app/default/count.html

http://127.0.0.1:8000/app/default/count.xml

http://127.0.0.1:8000/app/default/count.json

上述操作返回的字典将以HTML,XML和JSON格式呈现.

远程过程调用

web2py框架提供了一种将函数转换为Web服务的机制.这里描述的机制与前面描述的机制不同,因为 :

  • 在函数中包含参数.

  • 该函数必须在模型中定义.

  • 它强制执行更严格的URL命名约定.

  • 它适用于固定的一组协议,它很容易扩展.

  • 要使用此功能,必须导入并启动服务对象.

要实现此机制,首先,您必须导入并实例化服务对象.

 
 from gluon.tools import Service 
 service = Service()

这是在脚手架应用程序的"db.py"模型文件中实现的. Db.py 模型是web2py框架中的默认模型,它与数据库和控制器交互以实现对用户的所需输出.

实施后,模型中的服务可以在需要时从控制器访问.

以下示例显示了使用Web服务的远程过程调用的各种实现等.

Web服务

Web服务可以定义为使用XML,SOAP,WSDL和UDDI等协议集成基于Web的应用程序的标准化方法.

web2py支持其中大部分,但集成将非常棘手.

使用jQuery消耗web2py JSON服务

许多返回JSON格式web2py的方法,但在这里我们考虑JSON服务的情况.例如 :

def consumer():return dict()@service.json
def get_days():return ["Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat"]
def call():return service()

在这里,我们观察到 :

  • 该函数只返回一个空字典来渲染视图,它将使用该服务.

  • get_days 定义服务,函数调用公开所有已注册的服务.

  • get_days 不需要在控制器中,并且可以在模型中.

  • 呼叫始终位于default.py脚手架控制器中.

查看消费者行为如下:

{{extend 'layout.html'}}
<div id = "target"></div>

<script>
   jQuery.getJSON("{{= URL('call',args = ['json','get_days'])}}",
      function(msg){
         jQuery.each(msg, function(){ jQuery("#target").
         append(this &plus; "<br />"); } )
      }
   );
</script>

jQuery.getJSON 的第一个参数是以下服务的URL :   http://127.0.0.1:8000/app/default/call/json/get_days

这始终遵循模式 :

 
 http://< domain>/< app>/< controller>/call/< type>/< service>

网址介于 {{...}} 之间,因为它是在服务器端解析的,而所有内容都是else在客户端执行. jQuery.getJSON 的第二个参数是一个回调,它将传递JSON响应.

在这种情况下,回调循环响应中的每个项目(作为字符串的工作日列表),并附加每个字符串,然后将< br/> 附加到< div id ="target"> .

通过这种方式,web2py使用 jQuery.getJSON 管理Web服务的实现.