首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Flask Cors问题

Python Flask Cors问题
EN

Stack Overflow用户
提问于 2015-02-12 01:50:32
回答 12查看 75K关注 0票数 22

我是Python的新手,但我在使用Node应用程序时也遇到过同样的问题。我正在向我本地的jQuery服务器发出一个非常标准的Python请求:

代码语言:javascript
复制
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);
        }

我可以确认变量token是这样确认的:

代码语言:javascript
复制
Object {access_token: "791415154.2c0a5f7.4d707361de394512a29682f9cb2d2846", campaign_id: "102"}

但是我从我的javascript控制台得到了这个错误:

代码语言: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.

我发现当我构建Node应用程序时,这是一个cors错误。我运行jQuery AJAX请求的页面是http。以下是我的Python代码中我认为配置错误的部分:

代码语言:javascript
复制
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'

以及路由:

代码语言:javascript
复制
@app.route("/api/ia/v1/user_likes", methods=['POST', 'OPTIONS'])
def user_likes():
    validate = validate_request(request.data)

    return 'something'

我的Python错误也返回了一个错误,因为请求永远不会到达此行代码:

代码语言:javascript
复制
def validate_request(object_from_user):
    load_object = json.loads(object_from_user)

我可以稍后解决这个问题。不管怎样,有人对Python的Cors配置有什么建议吗?

EN

回答 12

Stack Overflow用户

发布于 2017-03-26 01:59:36

在我尝试了别人的建议和答案之后。下面是我使用的方法,它是有效的。

步骤:

  1. pip install flask flask-cors
  2. Copy并将其粘贴到app.py

文件中

代码

代码语言:javascript
复制
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)

  1. python app.py

注意:请确保在客户端的ajax配置中包含以下内容:

代码语言:javascript
复制
$.ajaxSetup({
    type: "POST",
    data: {},
    dataType: 'json',
    xhrFields: {
       withCredentials: true
    },
    crossDomain: true,
    contentType: 'application/json; charset=utf-8'
});

如果有人想知道,support_credentials=True只是意味着它沿着有效负载来回发送cookie。

票数 27
EN

Stack Overflow用户

发布于 2016-12-14 19:58:35

Flask有flask-cors模块。以下是代码片段和过程。

在您的flask应用程序中

  1. pip install -U flask-cors
  2. Add以下代码行:

从flask导入Flask从flask_cors导入CORS,cross_origin app = Flask(__name__) CORS(app) @app.route("/") def helloWorld():return "Hello world"

单击this link查看更多信息

票数 14
EN

Stack Overflow用户

发布于 2015-04-08 14:24:07

下面是如何通过自己处理CORS细节来弄脏你的手:

代码语言:javascript
复制
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)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28461001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档