Маршрутизация Flask и React

20

Я создаю приложение Flask с помощью React, у меня возникла проблема с маршрутизацией.

Бэкэнд отвечает за API, поэтому некоторые маршруты выглядят следующим образом:

@app.route('/api/v1/do-something/', methods=["GET"])
def do_something():
    return something()

и основной маршрут, который ведет к Реагированию:

@app.route('/')
def index():
    return render_template('index.html')

Я использую react-router в приложении React, все работает нормально, response-router принимает меня на /something, и я получаю визуализированный вид, но когда я обновляю страницу на /something, тогда приложение Flask позаботится об этом вызове, и я получаю ошибку Not Found.

Какое оптимальное решение? Я думал о перенаправлении всех вызовов, которые не звонят /api/v1/... в /, это не идеально, поскольку я верну домашнюю страницу своего приложения, а не визуализирую представление React.

  • 1
    Самый быстрый и простой способ, если вы не хотите, чтобы ваш сервер обрабатывал URL-адреса, это не использовать API истории HTML5. Отключение этого приведет к появлению URL-адресов hashbang, таких как /#/something а их перезагрузка всегда вызовет представление / на бэкенде. В противном случае вам нужно либо обработать запросы на вашем бэкэнде, либо перенаправить их в ваше приложение реагирования, которое, в свою очередь, должно проанализировать запрос и инициировать изменение местоположения, если запрошенный URL-адрес не равен / .
  • 0
    Это похоже на какое-то решение, спасибо!
Показать ещё 3 комментария
Теги:
flask
url-routing

1 ответ

21
Лучший ответ

Мы использовали все URL-адреса для этого.

from flask import Flask
app = Flask(__name__)

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
    return 'You want path: %s' % path

if __name__ == '__main__':
    app.run()

Вы также можете пройти лишнюю милю и повторно использовать систему Flask routing для соответствия path тем же маршрутам, что и клиент, чтобы вы могли встраивать клиента данных в JSON в ответ HTML.

  • 1
    если все маршруты будут направлены на перехват всех функций, как бы вы разделили внутренние API-маршруты и реагировали на маршруты, когда я выполняю ajax-запрос от внешнего интерфейса?
  • 5
    @shangyeshen Зарегистрируйте маршруты API перед перехватом, чтобы они имели приоритет.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню