Я думаю, это очень просто для многих из вас.
Я был бы очень признателен за помощь: Вот эти функции 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
Благодарю всех вас!