Я создаю приложение 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.
Мы использовали все 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.
/#/something
а их перезагрузка всегда вызовет представление/
на бэкенде. В противном случае вам нужно либо обработать запросы на вашем бэкэнде, либо перенаправить их в ваше приложение реагирования, которое, в свою очередь, должно проанализировать запрос и инициировать изменение местоположения, если запрошенный URL-адрес не равен/
.