FlaskRESTplus CORS请求未在响应中添加头

2024-10-01 11:24:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我在尝试为restapi设置CORS时遇到问题。 我当前使用的是Flask-Restplus包。我的端点如下所示:

@api_ns.route('/some/endpoint')
@api_ns.response(code=400, description='Bad Request.')
class AEndpointResource(Resource):

    @api_ns.param(**api_req_fields.POST_DOC)
    @api_ns.expect(POST_REQUIRED_BODY)
    @api_ns.marshal_with(code=201,
                     fields=my_api_models.MyEndpointResponse.get_serializer(),
                     description=my_api_models.MyEndpointResponse.description)
    def post(self) -> Tuple[my_api_models.MyEndpointResponse, int]:
        """
        The post body
        """
        # Some logic here
        return response, 200

如果我编写了一个小的javascript代码段并尝试在浏览器中启动它,我会得到一个错误,因为没有CORS头。我看到Flask Restplus已经在处理选项请求了,我什么也没告诉他。(根据this link,这是有意义的,提到自从Flask0.6以来,选项请求是自动处理的)

我的问题是,即使我尝试用以下方法装饰端点:

^{pr2}$

什么都没变,结果还是和以前一样。我从OPTIONS请求中得到了一个http200,但在响应中没有看到我的新头(即访问控制Allow Origin)。在

我错过什么了吗?在


Tags: restapiflaskfieldsmodelsresponsemycode
3条回答

我也遇到了一个CORS问题并解决了它this way

from flask import Flask
from flask_restplus import Api

app = Flask('name')
api = Api(app)

// your api code here


@app.after_request
def after_request(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    return response

使用Flask-CORS,它可以工作:

from flask import Flask, request
from flask_restplus import Resource, Api, fields
from flask_cors import CORS

# configuration
DEBUG = True

# instantiate the app
app = Flask(__name__)
api = Api(app)
app.config.from_object(__name__)

# enable CORS
CORS(app, resources={r'/*': {'origins': '*'}})

在我的笔记本电脑和浏览器上进行本地测试时,我可以通过在响应中添加头来解决cors问题。在

之前:return state, 200

之后:return state, 200, {'Access-Control-Allow-Origin': '*'}

相关问题 更多 >