Tornado 支援JSONP的請求封裝
阿新 • • 發佈:2019-02-17
由於JSONP強大的跨域訪問功能,發現tornado沒有對jsonp的預設支援,還好tornado是開源的,就簡單實現了一個JSONPHandler,對一切JSONP請求進行封裝。
對於jsonp跨域見上一篇文章
tornado對於jsonp的封裝主要在finish的時候返回的json是對前端頁面js的呼叫
import json from functools import wraps def jsonp(func): "Wraps JSONfiled output for JSONP requests." @wraps(func) def decorated_func(*args, **kwargs): # First argument always be the requestHandler requestHandler = args[0] callback = requestHandler.get_argument('callback', False) data = json.dumps(func(*args, **kwargs)) content = str(callback) + '(' + data + ')' if callback else data requestHandler.write(content) requestHandler.finish() return decorated_func
在tornado中可是直接使用函式修飾,對返回的資料做jsonp的處理
from tools import jsonp
class AnalyzeDomainIp(tornado.web.RequestHandler):
@jsonp
def 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']); });