Nano Hash - криптовалюты, майнинг, программирование

Можно ли сделать запрос POST в Flask?

В Flask необходимо сделать запрос POST со стороны сервера.

Представим, что у нас есть:

@app.route("/test", methods=["POST"])
def test():
    test = request.form["test"]
    return "TEST: %s" % test

@app.route("/index")
def index():
    # Is there something_like_this method in Flask to perform the POST request?
    return something_like_this("/test", { "test" : "My Test Data" })

Я не нашел ничего конкретного в документации Flask. Некоторые говорят, что проблема в urllib2.urlopen, но мне не удалось объединить Flask и urlopen. Это действительно возможно?

Заранее спасибо!

25.04.2012

Ответы:


1

Да, чтобы сделать запрос POST, вы можете использовать urllib, см. документацию.

Однако я бы рекомендовал вместо этого использовать модуль requests.

ИЗМЕНИТЬ:

Я предлагаю вам реорганизовать ваш код, чтобы извлечь общие функции:

@app.route("/test", methods=["POST"])
def test():
    return _test(request.form["test"])

@app.route("/index")
def index():
    return _test("My Test Data")

def _test(argument):
    return "TEST: %s" % argument
25.04.2012
  • Хм, да. На самом деле это потребовало бы выполнения сетевого запроса по небольшой причине. Я уверен, что есть лучший способ сделать это. 25.04.2012
  • Я не знал, что вы хотите сделать запрос к своему приложению, я обновил свой ответ. 25.04.2012
  • Рефакторинг для извлечения функциональности — хороший совет, он решает проблему, делая код более гибким +1 25.04.2012
  • Примечание о почему использовать запросы поможет 12.02.2015
  • минус 1: ссылка не работает и не содержит сведений о том, как сделать почтовый запрос. 18.08.2016

  • 2

    Для справки, вот общий код для отправки POST-запроса из Python:

    #make a POST request
    import requests
    dictToSend = {'question':'what is the answer?'}
    res = requests.post('http://localhost:5000/tests/endpoint', json=dictToSend)
    print 'response from server:',res.text
    dictFromServer = res.json()
    

    Обратите внимание, что мы передаем словарь Python, используя параметр json=. Это удобно говорит библиотеке запросов сделать две вещи:

    1. сериализовать dict в JSON
    2. напишите правильный тип MIME («application/json») в заголовке HTTP

    А вот приложение Flask, которое будет получать и отвечать на этот запрос POST:

    #handle a POST request
    from flask import Flask, render_template, request, url_for, jsonify
    app = Flask(__name__)
    
    @app.route('/tests/endpoint', methods=['POST'])
    def my_test_endpoint():
        input_json = request.get_json(force=True) 
        # force=True, above, is necessary if another developer 
        # forgot to set the MIME type to 'application/json'
        print 'data from client:', input_json
        dictToReturn = {'answer':42}
        return jsonify(dictToReturn)
    
    if __name__ == '__main__':
        app.run(debug=True)
    
    23.09.2015
  • Я хотел бы прокомментировать, насколько важна часть json=, упомянутая в ответе @Luke. Я боролся с этим в течение нескольких часов. Нашел ответ здесь. 12.07.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..