- Web2py 教程
- Web2py - 首页
- Web2py - 简介
- Web2py - Python 语言
- Web2py - 框架概述
- Web2py - 核心
- Web2py - 视图
- Web2py - 数据库抽象层
- Web2py - 表单与验证器
- Web2py - 邮件与短信
- Web2py - 访问控制
- Web2py - 服务
- Web2py - 添加 Ajax 效果
- Web2py - 组件
- Web2py - 部署
- Web2py - 安全性
- Web2py 有用资源
- Web2py - 快速指南
- Web2py - 有用资源
- 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 服务
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**
这始终遵循以下模式:
http://<domain>/<app>/<controller>/call/<type>/<service>
URL 位于 **{{...}}** 之间,因为它是在服务器端解析的,而其他所有内容都在客户端执行。**jQuery.getJSON** 的第二个参数是一个回调函数,它将接收 JSON 响应。
在这种情况下,回调函数会循环遍历响应中的每个项目(一周中的几天作为字符串的列表),并将每个字符串附加到 **<div id = "target">** 后面,后面跟着一个 **<br/>**。
通过这种方式,web2py 使用 **jQuery.getJSON** 管理 Web 服务的实现。