Запрос Flask-RESTplus CORS не добавляет заголовки в ответ - PullRequest
0 голосов
/ 05 июня 2018

У меня проблема с попыткой настроить CORS для моего REST API.В настоящее время я использую пакет 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 уже обрабатывает запрос OPTIONS, и я ничего ему не сказал.(Это имеет смысл в соответствии с этой ссылкой с упоминанием, что начиная с Flask 0.6 запросы OPTIONS обрабатываются автоматически)

Моя проблема в том, что даже когда я пытаюсь декорировать свою конечную точку, используя:

from flask-restplus import cors   # <--- Adding this import

...
class AnEndpointResource(Resource):
    ...
    @my_other_decorators
    ...
    @cors.crossdomain(origin='*')  # <--- Adding this new decorator on my endpoint
    def post(self) -> Tuple[my_api_models.MyEndpointResponse, int]:
        ...

Ничего не меняется, и я все равно получаю тот же результат, что и раньше.Я получаю HTTP 200 из запроса OPTIONS, который автоматически обрабатывается, как и раньше, но я не вижу свои новые заголовки (т.е. Access-Control-Allow-Origin) в ответе.

Я что-то упустил?

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

У меня тоже была проблема с CORS, и я решил ее таким образом :

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
0 голосов
/ 27 декабря 2018

При локальном тестировании на моем ноутбуке и в браузере мне удалось решить проблему cors, добавив заголовок в ответ.

до: return state, 200

после:return state, 200, {'Access-Control-Allow-Origin': '*'}

0 голосов
/ 08 июня 2018

Я протестировал, и заголовки, которые вы ищете, добавляются в ответ на последующий запрос GET.Декоратор @cors.crossdomain имеет опцию automatic_options, которая по умолчанию установлена ​​на True.Это означает, что ваш запрос OPTIONS будет по-прежнему обрабатываться автоматически.

См. этот тест, чтобы проверить, как он должен работать.

Модуль flask_restplus.cors не задокументирован, поэтому не уверенесли вы должны использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...