Tornado 支持JSONP的请求封装

来源:互联网 发布:重庆宏宇软件 编辑:程序博客网 时间:2024/06/09 23:47

由于JSONP强大的跨域访问功能,发现tornado没有对jsonp的默认支持,还好tornado是开源的,就简单实现了一个JSONPHandler,对一切JSONP请求进行封装。

对于jsonp跨域见上一篇文章

tornado对于jsonp的封装主要在finish的时候返回的json是对前端页面js的调用

import jsonfrom functools import wrapsdef jsonp(func):"Wraps JSONfiled output for JSONP requests."@wraps(func)def decorated_func(*args, **kwargs):# First argument always be the requestHandlerrequestHandler = args[0]callback = requestHandler.get_argument('callback', False)data = json.dumps(func(*args, **kwargs))content = str(callback) + '(' + data + ')' if callback else datarequestHandler.write(content)requestHandler.finish()return decorated_func

在tornado中可是直接使用函数修饰,对返回的数据做jsonp的处理

from tools import jsonpclass AnalyzeDomainIp(tornado.web.RequestHandler):@jsonpdef get(self, collection='todayDomain', domain=''):return datacenter.get_domain_detail_ip(collection, domain)


前端的请求

$.getJSON('http://www.server.com:8081/jsonp/helloword?jsonp=?', function(data) {              $('#get-console').html(data['josnp-get']);          });




0 0
原创粉丝点击