Клиент работает на локальном хосте: 4200, API одновременно работает на локальном хосте: 5000.
Согласно тому, что я нашел. Нет проблем с тем, как я все упорядочил, и библиотека cors-flask должна выполнять свою работу. Это соответствует этому сообщению на форуме. Ошибка Flask-CORS.
Вы увидите, что я настроил CORS(app), как указано в документации Flask CORS, в своем приложении. .py ниже.
Код: Выделить всё
from flask import Flask
from api.utils.db import DB
from api.route.home import base
from api.route.analytics import analytics
from flask_cors import CORS
def create_app():
app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "*"}}, origins="*", methods=['GET', 'POST'], allow_headers=['Content-Type'])
base.register_blueprint(analytics)
app.register_blueprint(base)
return app
if __name__ == '__main__':
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('-p', '--port', default=5000, type=int, help='port to listen on')
args = parser.parse_args()
port = args.port
db = DB()
try:
db.check_connection()
app = create_app()
app.run(host='0.0.0.0', port=port)
except Exception as e:
print (f"{e}")
Я также попытался использовать декоратор after_request, который должен изменять заголовки до завершения ответа. Это также не удалось.
ClinicAnalytics ниже относится к сопоставленной модели SQLAlchemy, никаких внешних вызовов API не происходит.
Analytics.py
Код: Выделить всё
from flask import Blueprint, jsonify, Response
from sqlalchemy import select
from api.model import ClinicAnalytics, engine
from sqlalchemy.orm import Session
from api.service.analytics_service import AnalyticsService
from flask_cors import cross_origin
analytics = Blueprint("analytics", __name__, url_prefix='/analytics')
analytics_service = AnalyticsService()
@analytics.route("/", methods=['GET'])
@cross_origin(origins="*")
def analytics_home():
with Session(engine) as session:
rows = session.query(ClinicAnalytics).all()
return analytics_service.rows_to_object(rows)
@analytics.route("/clinic")
def analytics_clinic():
pass
@analytics.after_request
def fix_headers(response: Response):
response.headers["Access-Control-Allow-Origin"] = "*"
response.headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS"
response.headers["Access-Control-Allow-Headers"] = "Content-Type, X-Requested-With"
return response
Я пробовал несколько разных материалов: типы и происхождение, никакие комбинации не работают.
Подводя итог:
- Есть ли другой порядок, который мне нужно разместить класс CORS в файле app.py?
- Если порядок этого класса в порядке, нужно ли мне что-нибудь удалять?
- Если мне не нужно ничего удалять, это потому, что я использую две конечные точки локального хоста?
Подробнее здесь: https://stackoverflow.com/questions/790 ... tors-on-ro