Как избежать ошибки Python Flask в Firefox при перезагрузке страницы - PullRequest
0 голосов
/ 25 мая 2018

У меня на главной странице есть приложение с колбой Python с всплывающими модалами, эти модалы имеют формы, которые отправляют данные в базу данных.После отправки данных я перенаправляю на главную страницу.Я получаю ошибку Firefox «Чтобы отобразить эту страницу, Firefox должен отправить информацию, которая будет повторять любое действие (например, поиск или подтверждение заказа), которое было выполнено ранее».Если я нажму повторно отправить веб-страницу, то перезагрузится нормально, но я бы хотел избежать сообщения.

@app.route('/home', methods= ['GET', 'POST'])
def index():
    info = get_info()
    data = get_data()
    load_dictionary = get_load()

      if request.method == 'POST':
        name = request.form['id']
        if int(request.form['library_full']) == 0 and request.form['load_number'] == '':
          return redirect(url_for('tks_msg'))
        if int(request.form['library_full']) == 0:
          load_number = request.form['load_number']
        else:
          load_number = request.form['library_full']

        send_load(name= name, load= load_number)
        load_dictionary = get_load()
        info = get_info()
        data = get_data()
        return render_template('names3.html', names= info, data= data, load= load_dictionary)  

    return render_template('names3.html', atr_names= info, data= data, load= load_dictionary)


@app.route('/edit/<string:name>/', methods = ['GET', 'POST'])
def edit_form(name):
    if request.method == 'POST':
       name= name
       comment= request.form['user_comment']
       condition = request.form['condition']
      # load_number= request.form['load_number']
       status = request.form['status']
       send_information(name= name, status= status, condition = condition, comments= comment)

       return redirect(url_for('index'))
    else:
       return render_template('edit_shaker.html', name= name)


@app.route('/thankyou', methods= ['GET'])
def tks_msg():
    return render_template('thankyou.html')



if __name__ == '__main__':
    app.run(host= '0.0.0.0', port= 2345, debug= True)

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Решение было очень простым, вместо использования шаблона визуализации я могу просто использовать redirect и url_for.Это возвращает меня к URL с обновленной информацией.

0 голосов
/ 26 мая 2018

К сожалению, эта «ошибка» вызвана самим Firefox, и от нее будет непросто избавиться, если вообще возможно.Это связано с тем, что Firefox предупреждает пользователя о POST на сервере.Так что, если вы обновите его, он отправит данные POST повторно, и это не всегда хорошо.

Единственный способ избавиться от него, если это происходит с помощью перенаправления GET.Поэтому, как только пользователь вводит данные, вы должны будете перенаправить их на другую страницу (или ту же страницу) без какого-либо POST.

Редактировать: я понимаю, что забыл добавить некоторую информацию.Это диалоговое окно с предупреждением не является ошибкой и не относится к Flask.Это часть HTTP / s POST-запросов, которые Firefox показывает при попытке обновить страницу, отправившую POST-запрос.

...