Приложение Flask - Python - POST API и Redirect впоследствии - PullRequest
0 голосов
/ 19 апреля 2019

Я думаю, это очень просто для многих из вас.

Я был бы очень признателен за помощь: Вот эти функции Python:

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


def id_generator(size=10, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))


@app.route('/result',methods = ['POST', 'GET'])
def result():
    if request.method == 'POST':
        result = request.form
        requests.post("https://ecnaoptriha.herokuapp.com/item/{}".format(id_generator()), data=json.dumps({"price":result['Price'], "store_id":result['Id']}), headers={"Content-Type": "application/json"})
        return render_template("result.html",result = result)



Это в основном имеет внешний интерфейс: https://ecnaoptriha.herokuapp.com с HTML-формой в папке templates \ home.html как:

  <form action = "http://ecnaoptriha.herokuapp.com/result" method = "POST">
     <p>Price: <input type = "text" name = "Price" /></p>
     <p>ID: <input type = "text" name = "Id" /></p>
     <p><input type = "submit" value = "submit" /></p>
  </form>



и вызывает https://ecnaoptriha.herokuapp.com/item/{} с глаголом POST, чтобы создать элемент с 'price' и 'store_id', но я хочу, чтобы скрипт также перенаправлял пользователя в templates \ result.html после этого.

Теперь, если я оставлю только часть перенаправления: return render_template ("result.html", result = result)

без строки post api, все работает.
Если я сохраню оба, POST сработает - элемент появится, но через пару секунд он как бы «выйдет», выдав 503. Глядя на логи Heroku, я получил:

2019-04-19T11:35:52.859030+00:00 heroku[router]: at=info method=GET path="/" host=ecnaoptriha.herokuapp.com request_id=c0wrwr-4556-4707-9e73-4465df3d2753 fwd="84.232.143.118" dyno=web.1 connect=0ms service=1ms status=200 bytes=497 protocol=https

2019-04-19T11:36:29.475272+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/item/8I52G5ATQO" host=ecnaoptriha.herokuapp.com request_id=5d3e5754-fe25-451b-a958-4eab9at728b2 fwd="54.155.189.100" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0 protocol=https

2019-04-19T11:36:29.427287+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/result" host=ecnaoptriha.herokuapp.com request_id=d6er3507-3d43-464b-b28e-e083f4274137 fwd="84.232.143.118" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0 protocol=http



Я понятия не имею, почему POST отправляет запрос к method = POST path = "/ result" или что я должен сделать, чтобы изменить такое поведение.

Так что да, независимо они работают - POST api и redirect, но оба в одной и той же функции ... не удается ..

Таким образом, библиотеки и все это включены, и учитывая тот факт, что они работают, будучи разделенными, код должен быть просто в порядке.

Итак, как я могу справиться с этой частью?

requests.post("https://ecnaoptriha.herokuapp.com/item/{}".format(id_generator()), data=json.dumps({"price":result['Price'], "store_id":result['Id']}), headers={"Content-Type": "application/json"})
        return render_template("result.html",result = result)



Я хочу, чтобы пользователь пошел на:
http://ecnaoptriha.herokuapp.com

Введите 2 значения, которые затем извлекаются и звонки в пределах:
https://ecnaoptriha.herokuapp.com/item/{<ID>}

А затем просто перенаправляется на:
http://ecnaoptriha.herokuapp.com/result




Благодарю всех вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...