Web2py 服务

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 Services

Web服务可以被定义为使用XML、SOAP、WSDL和UDDI这样的协议来集成基于Web的应用程序的标准化方法。

web2py支持其中的大部分,但整合将会相当棘手。

使用jQuery消耗web2py的JSON服务

有很多方式可以从web2py返回JSON,但在这里我们考虑一个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 不需要在控制器中,可以在模型中。

  • call 总是在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 + "<br />"); } )
      }
   );
</script>

第一个参数是 jQuery.getJSON 的URL地址,如下所示: http://127.0.0.1:8000/app/default/call/json/get_days

这个URL地址一直遵循以下模式-

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

该URL位于 {{…}} 之间,因为它在服务器端解析,而其他的在客户端执行。而 jQuery.getJSON 的第二个参数是一个回调函数,它会接收JSON响应。

在这种情况下,回调函数会循环遍历响应中的每个项(一个字符串列表表示的星期几),并将每个字符串添加到 <br/>后面,然后附加到 <div id = "target">中。

这样,web2py利用 jQuery.getJSON 来管理Web服务实现。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程