Я переношу приложение из web.py в Flask, главным образом потому, что поддержка web.py для Python 3 является пятнистой, и, похоже, все меньше интереса к web.py.
Но то, что я не могу найти в Flask/Werkzeug, - это способ использовать маршрутизатор для отправки внутренних запросов в моем приложении. Приложение структурировано таким образом, что будет много вызовов внутри приложения, а в web.py я обрабатываю их более или менее следующим образом:
app = web.application(....)
def callUrl(url, method, env, data):
parserUrl = url lib.parse.urlparse(url)
if parsedUrl.scheme == '' and parsedUrl.netloc == '':
# local call
res = app.request(url, method=method, data=data, env=env)
...
else:
assert env == {}
res = requests.request(url, method=method, data=data)
....
Я пытаюсь найти способ сделать что-то подобное с Flask, но, видимо, я смотрю не туда. Может ли кто-нибудь указать мне в правильном направлении?
Хорошо, отвечая на мой вопрос. Решение, которое я выбрал, состояло в том, чтобы в основном повторно реализовать app.request
из web.py, заполнив словарь условий всеми необходимыми переменными WSGI (REQUEST_METHOD
, PATH_INFO
и т.д.), Включая wsgi.input
как объект io.BytesIO()
который io.BytesIO()
правильные данные в приложении WSGI.
Затем я создал подходящий метод start_response() для сохранения заголовков и вызвал
resultData = app.wsgi_app(environ, start_response)
Приложение флеши проходит все движения запросов и сред и выполняет всю маршрутизацию, и я возвращаю возвращаемые данные обратно в resultData
(и заголовки с любыми ошибками и т.д. Были переданы моему методу start_response
).