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服务可以定义为使用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服务的实现。
作者:terry,如若转载,请注明出处:https://www.web176.com/web2py/867.html