【问题标题】:Cross Origin Problem with Flask Api (Access-Control-Allow-Origin)Flask Api 的跨域问题(Access-Control-Allow-Origin)
【发布时间】:2022-05-06 03:28:46
【问题描述】:

大家好。

我已经测试了我在互联网上可以找到的所有内容,但没有任何方法可以解决这个问题。我真的希望这里有人可以帮助我解决这个问题。

当我尝试从后端向我的烧瓶 API 执行“补丁”请求时,我收到此错误(GET、DELETE 和 PUT 工作正常):

从源访问“https://MYAPI-NOTREALURL.com”获取 “https://MYBACKEND-NOTREALURL.com”已被 CORS 政策阻止: 对预检请求的响应未通过访问控制检查: “Access-Control-Allow-Origin”标头包含多个值 'https://MYBACKEND-NOTREALURL.com, *',但只允许一个。有 服务器发送带有有效值的标头,或者,如果是不透明的 响应满足您的需求,将请求的模式设置为“no-cors”以 获取禁用 CORS 的资源。

这就是我的 API 代码的编写方式:

from flask_cors import CORS, cross_origin
from flask import render_template, redirect, flash, request, url_for, jsonify, session, make_response
from flask_restful import Api, Resource, reqparse
import requests

app = Flask(__name__)
cors = CORS(app, resources={r"/*": {"origins": "*"}})
api = Api(app)

class ordersByID(Resource):
    def get(self,ID_ORDER):
        ****
        return jsonify(data)

    def patch(self,ID_ORDER):
        req321 = request.form
        result = updateOrder(req321,ID_ORDER)
        return result

    def delete(self,ID_ORDER):
        ****
        return result

    def put(self,ID_ORDER):
        ****
        return result
api.add_resource(ordersByID, "/orders/id/<string:ID_ORDER>")
if __name__ == '__main__':
app.run(debug=True)

我已经测试了我在互联网上可以找到的所有内容,但在尝试执行补丁请求时没有任何效果。我正在使用从弹出窗口获取的补丁请求。

<form action="{{ **https://MYAPI-NOTREALURL.com** }}" id="popupForm" method="patch" onsubmit="formFetch(event,this,'patch')">

你可以查看下面的javascript代码。

function formFetch(e,form,method) {
  result = fetch(form.action, {method:method, body: new FormData(form)})
  .then(response => response.json())
  .then(data => document.getElementById('submitedFormConfirmationText').innerHTML = data['DB_Result']
  );
  e.preventDefault();
  document.getElementById('submitedFormConfirmation').style.display = 'inline';
};

我真的希望有人可以帮助我解决这个问题而无需重做整个代码?

【问题讨论】:

    标签: api flask cors cross-domain


    【解决方案1】:

    我设法解决了这个问题。

    由于某些奇怪的原因,带有小写字母的“补丁”在本地工作,但在部署时它不起作用。

    将方法从“patch”更改为“PATCH”解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2017-05-17
      • 1970-01-01
      • 2013-11-23
      • 2012-08-10
      • 2019-02-28
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2015-07-18
      相关资源
      最近更新 更多