Flask / Werkzeug эквивалентность web.py app.request ()

1

Я переношу приложение из 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, но, видимо, я смотрю не туда. Может ли кто-нибудь указать мне в правильном направлении?

  • 1
    Вы можете остановиться на этом? Почему ваше приложение будет называть себя таким образом? Если вы хотите вызвать функцию в своей программе, почему бы просто не вызвать эту функцию вместо использования какого-либо HTTP-запроса? Помимо тестирования, я не вижу варианта использования для этого вообще.
  • 0
    Я согласен с @rje: звонки по внутренним запросам - это антипаттерн в Flask. Вы должны структурировать свой код с помощью классов и функций и вызывать их напрямую.
Показать ещё 3 комментария
Теги:
flask
werkzeug

1 ответ

0

Хорошо, отвечая на мой вопрос. Решение, которое я выбрал, состояло в том, чтобы в основном повторно реализовать 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).

Ещё вопросы

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