Max*_*win 15 javascript python ajax jquery flask
我对Python很陌生,但我在使用Node应用程序时遇到了同样的问题.我正在向我的本地Python服务器发出一个非常标准的jQuery AJAX请求:
init: function(callback) {
var token = _config.get_token();
$.ajax({
url: 'http://localhost:5000/api/ia/v1/user_likes',
type: 'POST',
contentType: 'application/json',
datatype: 'json',
data: token
})
.done(function(data) {
callback(data);
})
.fail(function(err) {
callback(err);
});
callback(token);
}
Run Code Online (Sandbox Code Playgroud)
我可以确认变量令牌是这样确认的:
Object {access_token: "791415154.2c0a5f7.4d707361de394512a29682f9cb2d2846", campaign_id: "102"}
Run Code Online (Sandbox Code Playgroud)
但我从我的JavaScript控制台收到此错误:
XMLHttpRequest cannot load http://localhost:5000/api/ia/v1/user_likes. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://s3.amazonaws.com' is therefore not allowed access. The response had HTTP status code 500.
Run Code Online (Sandbox Code Playgroud)
我发现当我构建Node应用程序时,这是一个cors错误.我运行jQuery AJAX请求的页面是http.以下是我认为我配置错误的Python代码部分:
from flask import Flask, request, redirect
from flask.ext.cors import CORS, cross_origin
app = Flask(__name__)
cors = CORS(app)
app.config['CORS_HEADERS'] = 'application/json'
Run Code Online (Sandbox Code Playgroud)
路线:
@app.route("/api/ia/v1/user_likes", methods=['POST', 'OPTIONS'])
def user_likes():
validate = validate_request(request.data)
return 'something'
Run Code Online (Sandbox Code Playgroud)
我的Python错误也返回错误,因为请求永远不会进入这行代码:
def validate_request(object_from_user):
load_object = json.loads(object_from_user)
Run Code Online (Sandbox Code Playgroud)
我可以稍后解决.无论如何,有没有人对Python的Cors配置有任何建议?
Ala*_*ong 15
在我尝试了别人的建议和答案之后.这是我使用的,有效的.
脚步:
pip install flask flask-cors
将其复制并粘贴到app.py文件中
码
from flask import Flask, jsonify
from flask_cors import CORS, cross_origin
app = Flask(__name__)
CORS(app, support_credentials=True)
@app.route("/login")
@cross_origin(supports_credentials=True)
def login():
return jsonify({'success': 'ok'})
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8000, debug=True)
Run Code Online (Sandbox Code Playgroud)
python app.py注意:请确保在客户端的ajax配置中具有以下内容:
$.ajaxSetup({
type: "POST",
data: {},
dataType: 'json',
xhrFields: {
withCredentials: true
},
crossDomain: true,
contentType: 'application/json; charset=utf-8'
});
Run Code Online (Sandbox Code Playgroud)
如果有人想知道,support_credentials=True只是意味着它来回传送有效载荷中的cookie.
以下是如何通过自己处理 CORS 细节来弄脏你的手:
handle_result = {'result': True, 'msg': 'success'}
try:
# origin, where does this request come from, like www.amazon.com
origin = flask.request.environ['HTTP_ORIGIN']
except KeyError:
origin = None
# only accept CORS request from amazon.com
if origin and origin.find('.amazon.com') > -1:
resp = flask.make_response(str(handle_result))
resp.headers['Content-Type'] = 'application/json'
h = resp.headers
# prepare headers for CORS authentication
h['Access-Control-Allow-Origin'] = origin
h['Access-Control-Allow-Methods'] = 'GET'
h['Access-Control-Allow-Headers'] = 'X-Requested-With'
resp.headers = h
return resp
return flask.abort(403)
Run Code Online (Sandbox Code Playgroud)
小智 7
Flask具有flask-cors模块。以下是代码段以及过程。
pip install -U flask-cors
在烧瓶应用程序中添加以下行:
from flask import Flask
from flask_cors import CORS, cross_origin
app = Flask(__name__)
CORS(app)
@app.route("/")
def helloWorld():
return "Hello world"
Run Code Online (Sandbox Code Playgroud)点击此链接查看更多
小智 5
请在你的python文件中使用@cross_origin(origin='*')
from flask import Flask, jsonify
from flask_cors import CORS, cross_origin
app = Flask(__name__)
@app.route("/login", methods = ['GET'])
@cross_origin(origin='*')
def login():
return jsonify({'success': 'ok'})
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8000, debug=True)
Run Code Online (Sandbox Code Playgroud)
在路线装饰器之后使用 cors 装饰器。
这是文档的片段...
@app.route("/")
@cross_origin() # allow all origins all methods.
def helloWorld():
return "Hello, cross-origin-world!"
Run Code Online (Sandbox Code Playgroud)
现在,看来您正在使用 json,如果是这种情况,您可能应该阅读文档,因为它特别提到了这个用例,以及要设置的 cors_headers...它位于折叠下方,但该文档写得很好并且很简单去理解。
http://flask-cors.readthedocs.org/en/latest/#using-json-with-cors
| 归档时间: |
|
| 查看次数: |
28629 次 |
| 最近记录: |