Web2py - 服务

  • 简述

    web2py 提供对各种协议的支持,如 XMLJSON、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 服务可以定义为使用 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不需要在控制器中,可以在模型中。
    • 调用始终在 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
    这总是遵循模式 -
    
    http://<domain>/<app>/<controller>/call/<type>/<service>
    
    URL 位于{{...}}之间,因为它在服务器端解析,而其他所有内容都在客户端执行。jQuery.getJSON的第二个参数是一个回调,它将传递 JSON 响应。
    在这种情况下,回调循环遍历响应中的每个项目(作为字符串的工作日列表),并附加每个字符串,后跟<br/><div id = "target">
    通过这种方式,web2py 使用jQuery.getJSON管理 Web 服务的实现。