我有一个 Flask 应用程序,其中有一个我试图通过远程服务器调用的 RESTful API。
初始化文件:-
from flask.ext import restful
from flask.ext.cors import CORS
app = create_app(__name__)
app.config['CORS_HEADERS'] = 'Content-Type'
cors = CORS(app, resorces={r'/d/<string:d_name>': {"origins": '*'}})
api=restful.Api(app)
api.add_resource(g_Api, '/g/<string:g_id>')
api.add_resource(d_Api, '/d/<string:d_name>')
现在 d_Api 类:-
from flask import Flask, render_template, g
from flask.ext.restful import reqparse, abort, Api, Resource
def abort_if_not_exist(d_name):
return d_name
class d_Api(Resource):
def __init__(self):
self.d=d
def get(self, d_name):
val=abort_if_not_exist(d_name)
return val
这在同一个本地主机服务器上运行良好,返回正确的结果。在 localhost 上运行的服务器有一个对 api 的 ajax 调用,
$.ajax({
async: false,
type: 'GET',
url: 'http://localhost:8080/d/'+d_name,
success: function(data) {
alert(data);
}
});
当从远程主机调用时不返回任何响应,而是在 Firefox 中我得到 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource d 。这可以通过将资源移动到同一域或启用 CORS 来解决。
我我不确定如何为这个 api 端点配置 CORS。我正在使用 python 2.6 和“flask-cors”。
我发现了这种差异:当我尝试从本地主机访问 api - 2015-03-09 11:40:35 - Flask-Cors:385 - INFO - 来自 Origin:xyz-ld2 的 CORS 请求。 abc.biz:8080, 设置 Access-Control-Allow-Origin:* 当我尝试从远程主机访问 api 时:2015-03-09 11:47:15 - Flask-Cors:385 - INFO - 来自 Origin:None 的 CORS 请求,设置 Access-Control-Allow-Origin: *
请您参考如下方法:
问题出在资源定义上,您只能对资源使用正则表达式 您需要这样的东西或任何其他有效的正则表达式:
cors = CORS(app, resorces={r'/d/*': {"origins": '*'}})
