python flask javascript УДАЛИТЬ 405 (СПОСОБ НЕ РАЗРЕШЕН) - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь добавить кнопку для удаления музыкального заведения из моей базы данных postgres с помощью flask -sqlalchemy на странице этого места, а затем перенаправить на домашнюю страницу, но получаю сообщение об ошибке

DELETE ip 405 (METHOD NOT ALLOWED)

в моей консоли и

[28/May/2020
14:12:49] "DELETE /deletevenue/1 HTTP/1.1" 302 -
72.133.209.13 - - [28/May/2020
14:12:50] "DELETE / HTTP/1.1" 405 -

в моем терминале. Я не знаю, что не так. Я вижу, что на маршрут отправляется правильный идентификатор места проведения, но я все еще получаю эту ошибку. Я не знаю, что здесь не так. Это соответствующий код:

app.py

@app.route('/deletevenue/<venue_id>', methods=['DELETE'])
def delete_venue(venue_id):
  error = False
  venue = db.session.query(Venue).filter_by(id=venue_id).one()
  name = venue.name
  try:
    Venue.query.filter_by(id=venue_id).delete()
    db.session.commit()
  except:
    error = True
    db.session.rollback()
  finally:
    db.session.close()
  if error:
    flash('An Error occured.  The venue ' + name + ' could not be deleted.')
    return redirect(url_for('index'))
  else:
    flash('Success.  Venue ' + name + ' was deleted.')
    return redirect(url_for('index'))

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

show_venue. html

    <div class="row">
        <button class="btn btn-default btn-lg" id="deleteArtist" data-id="{{ venue.id }}">Delete this Artist</button>
    </div>
</section>

<script>
    const btn = document.getElementById('deleteArtist');
    btn.onclick = function(e) {
        venue_id = e.target.dataset['id'];
        console.log(venue_id)
        let r = confirm("Are you sure you want to delete this venue?");
        if (r == true) {
            fetch('/deletevenue/' + venue_id, {
                method: 'DELETE'
            })
        }
    }

</script>

Как я могу заставить эту кнопку работать?

1 Ответ

0 голосов
/ 28 мая 2020
  1. redirect () is flask => return response_code: 302 тем же методом, который был получен. (ЗДЕСЬ УДАЛИТЬ) => поэтому он перенаправляется на index route с помощью метода DELETE => 405.

  2. Метод fetch () return a Promise => Это необходимо ответ результата, вы не можете перенаправить код, например:

return redirect(url_for('index'))

Он должен вернуть json или что-то вроде значения, затем используйте значение проверки кода javascript => перенаправление. - Как сделать - перенаправить на другую веб-страницу

...